Ho letto che i punti deboli possono essere utilizzati per interrompere i riferimenti ciclici.Come interrompere il riferimento ciclico shared_ptr utilizzando weak_ptr
Si consideri il seguente esempio di un riferimento ciclico
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;
Ora qui sopra è un caso di riferimento ciclico e volevo sapere come posso rompere il riferimento ciclico sopra utilizzando weak_ptr
?
Aggiornamento: Sulla base di suggerimento ricevuto mi si avvicinò con la seguente:
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;
Sarà questo l'approccio corretto?
Cambia 'A :: shrd_ptr' in' boost :: weak_ptr' e tieni premuto 'shared_ptr' da qualche altra parte. –