我有两个类型:A & B. A“巧妙”点B和B“巧妙”点A. 在主范围我有一个智能指针到A.C++智能指针圆形链路
class A;
class B;
typedef shared_ptr<A> pA;
typedef shared_ptr<B> pB;
class B {
public:
B() {}
pA a;
virtual ~B() {cout << "delete b" << endl;}
};
class A {
public:
A() : b(new B()) {}
pB b;
virtual ~A() {cout << "delete a" << endl;}
};
int main(int argc, char **argv)
{
{
pA pa(new A());
pa->b->a = pa;
}
cout << "here" << endl;
}
我希望两个对象在范围的末尾被删除。 没有一个对象被删除,因为A有两个指向自己的指针(一个在b中,另一个在主要的勺子中)。
这是一个简单的例子。其实我有两种以上的类型和更多的指针。 可以想象,一个大对象结构指向彼此漂浮在RAM中,只有一个指针指向主结构。这个指针被释放后,我希望这个结构被删除。
好的图纸的循环引用,爽! –
相关:http://stackoverflow.com/questions/701456/what-are-potential-dangers-when-using-boostshared-ptr –