我有一个继承的类结构:
struct A {
ObjectByValue obv;
};
struct B : A {
OtherThings ot;
};
另一个想要指向A
:
struct C {
smartpointer<A> a;
};
当我创建C
时,我传入一个已创建的B
(作为指向A
的指针)。 C
没有自己A
(没有C
的{{1}}没有任何意义)。 A
将(希望)在释放C
指针之前总是死掉。我应该使用智能指针吗?参考?原始指针?这里有最好的做法吗?
答案 0 :(得分:3)
答案很大程度上取决于 拥有A
个实例的内容。
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
之前必须删除所有所有者的意义上)。