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 拥有这些对象的所有权。

在我看来,有(至少)三种选择:

  1. 使用vector<A>
  2. 使用vector<A*>
  3. 使用vector<shared_ptr<A> >

1. 不起作用是因为 A 不是可复制构造/可分配的吗?

我不喜欢 2. 因为我必须确保再次删除指针。

如果我用3。我觉得这样并不能明确表示BA对象的所有者。此外,我 运行 提出了一个问题,如果我希望 B 的用户从该向量中删除指针,他们需要通过 shared_ptr<A> 传递他们想要删除的元素,对吗?

在这种情况下,什么是干净的设计决策?有什么好的参考资料吗?

  1. 正确; A 需要 copy-assignable and copy-constructible 才能与 std::vector 一起使用,但是从 C++11 开始,这在很大程度上取决于您需要在向量上使用的操作。
  2. 我同意,我不会再使用原始指针,除非我有一个非常令人信服的理由(我认为这不是一个)。
  3. 你考虑过unique_ptr吗?该选项有一个很好的 blog post