代码示例:
struct B;
sruct A{
~A() { count <<" ~A()"<<endl;}
boost::shared_ptr<B> b;
};
struct B{
~B() { count <<"~B()"<<endl;}
// boost::shared_ptr<A> a; // 循环引用 不可用
boost::weak_ptr<A> a ; //可以打破循环引用,在先声明的B中用weak_ptr
};
int main()
{
boost::shared_ptr<A> ap(new A);
boost::shared_ptr<B> bp(new B);
ap->b = bp;
bp->a = ap;
return 0;
}
}
本文通过一个C++代码示例展示了如何使用boost::weak_ptr来解决智能指针之间的循环引用问题。在示例中,两个结构体A和B互相持有对方的智能指针,使用weak_ptr可以避免这种循环导致的内存泄漏。
3万+





