我已经看到boost::weak_ptr
的一个用法是打破循环依赖。有人能给我一个简单的具体例子来说明这个特征吗?
谢谢
答案 0 :(得分:5)
简单来说:
{ // Enter scope
shared_ptr<A> my_a(new A);
shared_ptr<B> my_b(new B);
my_a->remember_this_b( my_b ); // Stores a copy of a smart pointer
my_b->remember_this_a( my_a ); // Stores a copy of a smart pointer
} // Leave scope. my_a and my_b are destroyed.
如果这两个函数都存储了shared_ptr
,对象将永远不会被删除,因为shared_ptr
都不会达到引用计数为零。
但是,如果其中任何一个使用weak_ptr
,则weak_ptr
指向的对象在离开范围时将被销毁。而这反过来会破坏最后shared_ptr
到另一个对象。