【发布时间】:2014-02-25 14:49:31
【问题描述】:
我有两种类型:A 和 B。 A“聪明”点B,B“聪明”点A。 在主范围内,我有一个指向 A 的智能指针。
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 中相互指向,而主作用域中只有一个指向该结构的指针。一旦这个指针被释放,我希望这个结构被删除。
【问题讨论】:
标签: c++ shared-ptr smart-pointers circular-reference