合适的智能指针

时间:2015-02-18 22:36:21

标签: c++ inheritance smart-pointers

我有一个继承的类结构:

struct A {
    ObjectByValue obv;
};

struct B : A {
    OtherThings ot;
};

另一个想要指向A

的类
struct C {
    smartpointer<A> a;
};

当我创建C时,我传入一个已创建的B(作为指向A的指针)。 C没有自己A(没有C的{​​{1}}没有任何意义)。 A将(希望)在释放C指针之前总是死掉。我应该使用智能指针吗?参考?原始指针?这里有最好的做法吗?

1 个答案:

答案 0 :(得分:3)

答案很大程度上取决于 拥有A个实例的内容。

  • 如果&#34;没有人&#34;拥有A实例,然后必须全局或静态分配。在这种情况下,您应该使用普通引用(A&)。这也断言对象永远不能为空(即它始终存在于C的生命周期内。)

否则,动态分配对象:

  • 如果某个其他对象拥有A实例,并且可以证明它比C更长,则情况与静态分配的情况非常相似。所有者应该有unique_ptr<A>,而C可以有一个简单的引用。
  • 如果某个其他对象拥有A个实例,但可能会或可能不会超过C,则所有者应使用shared_ptr<A>C应使用weak_ptr<A> 1}}。如果在C之前删除所有者,则weak_ptr将自动变为空。
  • 如果C实例与其他所有者之间的所有权共享,那么您应该在两个地方使用shared_ptr<A>。然后,C实例保证其A成员始终有效,并共享所有权(在删除A之前必须删除所有所有者的意义上)。