vector<A> vs vector<A*> vs vector<shared_ptr<A> > 在 C++ 中
vector<A> vs vector<A*> vs vector<shared_ptr<A> > in C++
我有一个 class A
既不可复制构造也不可分配。现在我想要另一个 class B
来保存 A
对象的向量。同样清楚的是 B
拥有这些对象的所有权。
在我看来,有(至少)三种选择:
- 使用
vector<A>
- 使用
vector<A*>
- 使用
vector<shared_ptr<A> >
1. 不起作用是因为 A
不是可复制构造/可分配的吗?
我不喜欢 2. 因为我必须确保再次删除指针。
如果我用3。我觉得这样并不能明确表示B
是A
对象的所有者。此外,我 运行 提出了一个问题,如果我希望 B
的用户从该向量中删除指针,他们需要通过 shared_ptr<A>
传递他们想要删除的元素,对吗?
在这种情况下,什么是干净的设计决策?有什么好的参考资料吗?
- 正确;
A
需要 copy-assignable and copy-constructible 才能与 std::vector
一起使用,但是从 C++11 开始,这在很大程度上取决于您需要在向量上使用的操作。
- 我同意,我不会再使用原始指针,除非我有一个非常令人信服的理由(我认为这不是一个)。
- 你考虑过
unique_ptr
吗?该选项有一个很好的 blog post。
我有一个 class A
既不可复制构造也不可分配。现在我想要另一个 class B
来保存 A
对象的向量。同样清楚的是 B
拥有这些对象的所有权。
在我看来,有(至少)三种选择:
- 使用
vector<A>
- 使用
vector<A*>
- 使用
vector<shared_ptr<A> >
1. 不起作用是因为 A
不是可复制构造/可分配的吗?
我不喜欢 2. 因为我必须确保再次删除指针。
如果我用3。我觉得这样并不能明确表示B
是A
对象的所有者。此外,我 运行 提出了一个问题,如果我希望 B
的用户从该向量中删除指针,他们需要通过 shared_ptr<A>
传递他们想要删除的元素,对吗?
在这种情况下,什么是干净的设计决策?有什么好的参考资料吗?
- 正确;
A
需要 copy-assignable and copy-constructible 才能与std::vector
一起使用,但是从 C++11 开始,这在很大程度上取决于您需要在向量上使用的操作。 - 我同意,我不会再使用原始指针,除非我有一个非常令人信服的理由(我认为这不是一个)。
- 你考虑过
unique_ptr
吗?该选项有一个很好的 blog post。