Io lavoro con un codebase che è stato parzialmente implementato da qualcuno che era innamorato di soluzioni troppo complesse per problemi semplici (ad esempio classi di template con due parametri che sono stati sempre istanziati per un paio di tipi). Una cosa che ha fatto è stata creare oggetti in un puntatore intelligente, e quindi fare in modo che l'oggetto memorizzi un puntatore debole su se stesso.Memorizza puntatore debole a self
class MyClass {
//...
boost::weak_ptr<MyClass> m_self;
//...
};
boost::shared_ptr<MyClass>
Factory::Factory::Factory::CreateMyClass() {
boost::shared_ptr<MyClass> obj(new MyClass(...));
boost::weak_ptr<MyClass> p(obj);
obj->storeSelfPointer(p);
return obj;
}
La classe procede quindi utilizzare m_self bloccandolo e passando attorno al puntatore condivisa risultante.
Per la vita di me, non riesco a capire cosa stava cercando di realizzare. C'è qualche schema o idea che spiegherebbe questa implementazione? Mi sembra che questo sia completamente inutile e mi piacerebbe refactoring via.
EDIT: Devo dire che nessuna delle posizioni che utilizzano il puntatore intelligente risultante ottenuto dal blocco di m_self conserva effettivamente il puntatore intelligente.
non conoscevano 'std :: shared_from_this' Credo –
E 'C++ 98, roba più recente non viene utilizzato –
Beh ok, è una versione di C++ 98 del' enable_shared_from_this' –