【发布时间】:2015-01-21 00:58:16
【问题描述】:
我读过weak_pointers 可以用来打破循环引用。
考虑下面的循环引用示例
struct A
{
boost::shared_ptr<A> shrd_ptr;
};
boost::shared_ptr<A> ptr_A(boost::make_shared<A>());
boost::shared_ptr<A> ptr_b(boost::make_shared<A>());
ptr_A->shrd_ptr = ptr_b;
ptr_b->shrd_ptr = ptr_A;
以上是循环引用的例子,我想知道如何破解
上面的循环引用使用weak_ptr ?
更新: 根据收到的建议,我提出了以下建议:
struct A
{
boost::weak_ptr<A> wk_ptr;
};
boost::shared_ptr<A> ptr_A (boost::make_shared<A>());
boost::shared_ptr<A> ptr_B (boost::make_shared<A>());
ptr_A->wk_ptr = ptr_B;
ptr_B->wk_ptr = ptr_A;
这会是正确的方法吗?
【问题讨论】:
-
将
A::shrd_ptr更改为boost::weak_ptr并在其他地方按住shared_ptr。
标签: c++ smart-pointers c++03