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&
    。霍尔特对你的问题的评论是正确的——也许你需要进一步澄清你的用例。