繁体   English   中英

矢量<A>vs矢量</a> <A*> <A>vs矢量</a> <shared_ptr<A> <A>&gt;在C ++中</a>

[英]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. 正确; std::vector一起使用时, A必须具有可复制赋值和可复制构造性 ,但是从C ++ 11开始,这很大程度上取决于您需要在向量上使用的操作。
  2. 我同意,除非我有非常令人信服的理由(我认为这不是一个理由),否则我将不再使用原始指针。
  3. 您是否考虑过unique_ptr 关于该选项有一篇不错的博客文章

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM