Я читал, что 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
в другом месте. - person Captain Obvlious   schedule 23.11.2014