使用boost :: weak_ptr打破循环依赖关系的示例

时间:2012-01-10 17:26:03

标签: boost

我已经看到boost::weak_ptr的一个用法是打破循环依赖。有人能给我一个简单的具体例子来说明这个特征吗?

谢谢

1 个答案:

答案 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到另一个对象。