boost::intrusive_ptr
richiede intrusive_ptr_add_ref
e intrusive_ptr_release
da definire. Perché non è fornita una classe base che lo farà? C'è un esempio qui: http://lists.boost.org/Archives/boost/2004/06/66957.php, ma il poster dice "Non penso necessariamente che questa sia una buona idea". Perchè no?intrusive_ptr: Perché non è fornita una classe base comune?
Aggiornamento: Non penso che il fatto che questa classe possa essere usata impropriamente con l'ereditarietà multipla è una ragione sufficiente. Qualsiasi classe derivante da più classi base con il proprio conteggio di riferimento avrebbe lo stesso problema. Se questi conti vengono implementati tramite una classe base o no, non fa differenza.
Non penso che ci sia alcun problema con il multithreading; boost::shared_ptr
offre il conteggio dei riferimenti atomici e anche questa classe.
In una nota correlata, 'OSG :: ref_ptr' dalla libreria OpenSceneGraph utilizza un livello superiore classe base comune ('osg :: Referenced') per la sua implementazione del puntatore intelligente intrusivo. –
E osg :: Referenced è compatibile con boost :: intrusive_ptr poiché fornisce le funzioni intrusive_ptr_add_ref() e intrusive_ptr_release(). Funziona perfettamente. –