我讀過weak_pointers可以用來破壞循環引用。如何使用weak_ptr破壞shared_ptr循環引用
考慮一個循環引用
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'。 – 2014-11-23 05:17:09