boost::intrusive_ptr
requiere intrusive_ptr_add_ref
y intrusive_ptr_release
por definir. ¿Por qué no se proporciona una clase base que hará esto? Aquí hay un ejemplo: http://lists.boost.org/Archives/boost/2004/06/66957.php, pero el cartel dice "No creo necesariamente que sea una buena idea". Por qué no?intrusive_ptr: ¿Por qué no se proporciona una clase base común?
Actualización: No creo que el hecho de que esta clase pueda ser mal utilizada con Herencia múltiple sea motivo suficiente. Cualquier clase que derive de múltiples clases base con su propio recuento de referencia tendría el mismo problema. Si estas refotaciones se implementan a través de una clase base o no, no hace ninguna diferencia.
No creo que haya ningún problema con el multihilo; boost::shared_ptr
ofrece conteo de referencias atómicas y esta clase también podría.
En una nota relacionada, 'osg :: ref_ptr' de la biblioteca OpenSceneGraph utiliza una clase base común de nivel superior ('osg :: Referenced') para su implementación intrusiva de puntero inteligente. –
Y osg :: Referenced es compatible con boost :: intrusive_ptr ya que proporciona intrusive_ptr_add_ref() y funciones intrusive_ptr_release(). Funciona perfectamente. –