Realmente no necesito compartir los objetos, pero sí quiero asegurarme de que no se produzca ninguna pérdida de memoria. ¿Es correcto usar shared_ptr en este caso?No puedo usar std :: vector de auto_ptr - ¿Debería usar shared_ptr?
Respuesta
Si está utilizando el impulso, boost::ptr_vector podría ser más adecuado para sus necesidades.
Si no es así, puede utilizar shared_ptr
como sugirió o eliminar manualmente los elementos del vector una vez que haya terminado con ellos.
Desde el punto de vista del mantenimiento, shared_ptr
sería la solución preferida. Sin embargo, tenga en cuenta que shared_ptr
puede traer algunas penalizaciones de rendimiento, que pueden o no ser significativas para su aplicación.
Es un poco exagerado, pero no hay un puntero inteligente mucho mejor para eso. También puede considerar los contenedores de punteros de boost.
En C++ 0x, puede almacenar std::unique_ptr
en contenedores, que está más cerca de sus necesidades.
Estoy usando boost :: shared_ptr – amitlicht
+1 para contenedores de unique_ptr! – AshleysBrain
También puede usar Boost.PointerContainer. El uso de shared_ptr
expresa propiedad compartida. Ahora, si está seguro de que sus objetos están ligados a la vida útil del contenedor, entonces una PointerContainer es la mejor opción en cuanto al diseño (¿es eso una palabra?).
Si el rendimiento de bajo nivel de rendimiento/memoria no son requisitos críticos (es decir, el 97% de todos los casos), entonces simplemente vaya con shared_ptr. Es sencillo y bien entendido.
Si realmente desea mantener las cosas ajustadas y/o expresar la intención de propiedad más precisamente entonces boost::ptr_vector podría ser mejor, pero si su clase no administra ninguna otra memoria, simplemente eliminar manualmente en su destructor no es tan grande pecado, como a veces nos hacen creer ;-) Soy un gran defensor de RAII, pero aún así hago esto de vez en cuando.
- 1. ¿Debo dejar de usar auto_ptr?
- 2. Punteros vs auto_ptr vs shared_ptr
- 3. Uso de std :: shared_ptr
- 4. ¿Cuándo se debería usar std :: nothrow?
- 5. Para usar shared_ptr, ¿es seguro?
- 6. Si quiero usar std :: shared_ptr, ¿qué encabezado incluir?
- 7. std :: shared_ptr y inicializador
- 8. Cómo usar std :: ref?
- 9. impulso :: ptr_container y std :: vector <shared_ptr>
- 10. Ventajas de usar matrices en lugar de std :: vector?
- 11. std :: auto_ptr, delete [] y fugas
- 12. ¿Debo usar boost :: ptr_vector <T> o vector <boost :: shared_ptr <T>>?
- 13. ¿Cuándo debería usar un vector de objetos en lugar de un vector de punteros?
- 14. ¿Auto_ptr está obsoleto?
- 15. shared_ptr en std :: tr1
- 16. Cómo usar std :: find/std :: find_if con un vector de objetos de clase personalizados?
- 17. Al usar shared_ptr, ¿debería usar la declaración shared_ptr una sola vez o declarar shared_ptr en todos los lugares donde la paso?
- 18. ¿Cuándo debería usar std :: async con sync como política?
- 19. ¿Es malo usar auto_ptr con el nuevo char [n]
- 20. Cómo manejar la evolución de C++ std :: namespace? por ejemplo: std :: tr1 :: shared_ptr vs. std :: shared_ptr vs. boost :: shared_ptr vs. boost :: tr1 :: shared_ptr
- 21. ¿Debería preocuparme por la fragmentación de memoria con std :: vector?
- 22. vector o mapa, ¿cuál usar?
- 23. ¿Es posible usar std :: accumulate con std :: min?
- 24. Uso del eliminador personalizado con std :: shared_ptr
- 25. Cómo usar std :: signaling_nan?
- 26. auto_ptr o shared_ptr equivalente en gestionadas clases C++/CLI
- 27. impulso serializar y std :: shared_ptr
- 28. Producto interno cero al usar std :: inner_product
- 29. Pasando std :: shared_ptr a Constructores
- 30. ¿Cuándo no debería usar expresiones regulares?
¿Los objetos almacenados en el vector están asignados dinámicamente? ¿Tienen que serlo? –