C++ 向量<;A>;vs矢量<;A*>;vs矢量<;共享\u ptr<;A>&燃气轮机;在C++;
我有一个C++ 向量<;A>;vs矢量<;A*>;vs矢量<;共享\u ptr<;A>&燃气轮机;在C++;,c++,vector,shared-ptr,C++,Vector,Shared Ptr,我有一个a类,既不可复制也不可分配。现在我想要另一个类B来保存a对象的向量。很明显,B拥有这些对象的所有权 在我看来,至少有三种选择: 使用vector 使用vector 使用vector 那是对的吗。因为A不可复制、可构造/可分配,所以不起作用 我不喜欢2。因为我必须确保再次删除指针 如果我用3。我觉得这并不能清楚地表示B是A对象的所有者。我还遇到了这样一个问题,如果我想让B的用户从这个向量中删除指针,他们需要通过shared\u ptr传递他们想要删除的元素,对吗 在这种情况下,什么是清洁设
a类
,既不可复制也不可分配。现在我想要另一个类B
来保存a
对象的向量。很明显,B
拥有这些对象的所有权
在我看来,至少有三种选择:
vector
vector
vector
A
不可复制、可构造/可分配,所以不起作用
我不喜欢2。因为我必须确保再次删除指针
如果我用3。我觉得这并不能清楚地表示
B
是A
对象的所有者。我还遇到了这样一个问题,如果我想让B
的用户从这个向量中删除指针,他们需要通过shared\u ptr
传递他们想要删除的元素,对吗
在这种情况下,什么是清洁设计决策?这方面有什么好的参考资料吗
A
需要与std::vector
一起使用,但从C++11开始,这在很大程度上取决于需要对向量使用的操作唯一性\u ptr
?这是一个不错的选择汽车是可移动的吗?4.
std::unique_ptr
因为您不共享所有者身份。您想如何处理A
的向量?这是你在选择哪一个是正确的使用之前应该问自己的主要问题。我希望B
的用户请求向量的元素,并且他们也能够删除这些元素,例如通过调用B::delete(某种类型的a)
Nice reference。这是否意味着我通常会传递const unique_ptr(A)&
而不是A*
或const A&
?嗯,这取决于您的用例,我想,但是如果您真的需要传递指针(即使在B
之外),也许您应该使用smart_ptr
。我要么这样做,要么只是传递常量A&
。霍尔特对你的问题的评论是正确的——也许你需要进一步澄清你的用例。