¿Cuándo se debe usar intrusive_ptr en lugar de shared_ptr?Boost punteros inteligentes
Respuesta
Cuando ya tiene un contador de referencia almacenado dentro del objeto que está señalando.
+1, además del error tipográfico, así que lo arreglé para ti :). –
más allá de la biblioteca C++ estándar: Una introducción a la Boost Por Björn Karlsson
En la mayoría de las situaciones, no se debe impulsar el uso :: intrusive_ptr, debido a que la funcionalidad de la propiedad compartida es fácilmente disponible en alza: : shared_ptr, y un puntero inteligente no intrusivo es más flexible que un puntero inteligente intrusivo. Sin embargo, hay ocasiones en que se necesita un recuento de referencias intrusivas, tal vez para el código heredado o para la integración con clases de terceros. Cuando surge la necesidad, intrusive_ptr se ajusta a la ley, con la misma semántica que las otras clases de punteros inteligentes de Boost.
Al usar otro de los punteros inteligentes de Boost, garantiza una interfaz coherente para todas las necesidades de puntero inteligente, ya sean intrusivas o no. El recuento de referencias debe ser proporcionado por las clases que se utilizan con intrusive_ptr. intrusive_ptr gestiona el recuento de referencias realizando llamadas no calificadas a dos funciones, intrusive_ptr_add_ref e intrusive_ptr_release; estas funciones deben manipular adecuadamente el recuento de referencias intrusivas para que intrusive_ptrs funcione correctamente. Para todos los casos en que ya existe un recuento de referencias en los tipos que se van a utilizar con intrusive_ptr, habilitar la compatibilidad con intrusive_ptr es tan fácil como implementar esas dos funciones.
Uso intrusive_ptr cuando
- Es necesario tratar esto como un puntero inteligente.
- Existe un código que usa o proporciona un recuento de referencias intrusivas.
- Es imperativo que el tamaño del puntero inteligente sea igual al tamaño de un puntero sin formato.
Lo que dijo Nick. Un ejemplo de la vida real es administrar punteros COM.
- 1. Punteros inteligentes en Qt
- 2. punteros y matrices inteligentes
- 3. Punteros inteligentes vs Referencia
- 4. punteros inteligentes, typedefs y declaraciones directas
- 5. impulsar punteros inteligentes y BOOST_NO_MEMBER_TEMPLATES
- 6. ¿Hay "punteros inteligentes" en Java?
- 7. ¿Cómo puedo usar tipos de retorno covariantes con punteros inteligentes?
- 8. punteros inteligentes en C++: compartir punteros vs. compartir datos
- 9. Introducción a los punteros inteligentes en C++
- 10. ¿Cómo usar los punteros inteligentes de C++?
- 11. Punteros inteligentes y manejo de excepciones
- 12. pros y contras de punteros inteligentes
- 13. usando mem_fun() para contenedor de punteros inteligentes
- 14. ¿Debería una biblioteca usar una interfaz que utiliza punteros inteligentes?
- 15. Supresión del puntero al tipo incompleto y punteros inteligentes
- 16. Punteros inteligentes y recuento de referencias en Java
- 17. Cómo devolver punteros inteligentes (shared_ptr), por referencia o por valor?
- 18. Buscar fugas de memoria causadas por punteros inteligentes
- 19. ¿Por qué no debería usar referencias a punteros inteligentes?
- 20. Punteros inteligentes/gestión de memoria segura para C?
- 21. Pimpl con punteros inteligentes en una clase con un constructor plantilla: tema incompleta tipo raro
- 22. Una vez que haya adoptado los indicadores inteligentes de boost, ¿hay algún caso en el que use punteros sin formato?
- 23. boost lite?
- 24. ¿Cómo eliminar punteros inteligentes de un caché cuando ya no hay más referencias?
- 25. C++ 0x Comparaciones inteligentes de punteros: Inconsistente, ¿cuál es el fundamento?
- 26. ¿Cuál es la mejor manera de implementar punteros inteligentes en C++?
- 27. Usando for_each y boost :: bind con un vector de punteros
- 28. Boost MultiIndex - objetos o punteros (¿y cómo usarlos?)?
- 29. Boost serialización con punteros y constructor no predeterminado
- 30. Limpiar una lista/vector de punteros AWL
+1 bonita pregunta, pero un [posible duplicado] (http://stackoverflow.com/questions/569775/smart-pointers-boost-explained). –