2010-03-15 9 views

Respuesta

7

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.

2

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.

+0

Estoy usando boost :: shared_ptr – amitlicht

+0

+1 para contenedores de unique_ptr! – AshleysBrain

1

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?).

4

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.

Cuestiones relacionadas