boost::intrusive_ptr
nécessite intrusive_ptr_add_ref
et intrusive_ptr_release
à définir. Pourquoi une classe de base n'est-elle pas fournie qui le fera? Il y a un exemple ici: http://lists.boost.org/Archives/boost/2004/06/66957.php, mais l'affiche dit «Je ne pense pas nécessairement que ce soit une bonne idée». Pourquoi pas? Mise à jour: Je ne pense pas que le fait que cette classe puisse être utilisée abusivement avec Multiple Héritage est une raison suffisante. Toute classe dérivée de plusieurs classes de base avec leur propre nombre de références aurait le même problème. Que ces refcounts soient implémentés via une classe de base ou non ne fait aucune différence.intrusive_ptr: Pourquoi une classe de base commune n'est-elle pas fournie?
Je ne pense pas qu'il y ait un problème avec le multithreading; boost::shared_ptr
offre le comptage atomique des références et cette classe pourrait aussi.
Sur une note connexe, 'osg :: ref_ptr' de la bibliothèque OpenSceneGraph utilise une classe de base commune de haut niveau ('osg :: Referenced') pour son implémentation de pointeur intelligent intrusif. –
Et osg :: Referenced est compatible avec boost :: intrusive_ptr car il fournit des fonctions intrusive_ptr_add_ref() et intrusive_ptr_release(). Fonctionne parfaitement. –