verificar usar qué pueden para métodos libreria hay elementos contenedores contenedor clase c++ stl containers smart-pointers

c++ - usar - contenedores stl



Punteros y contenedores (3)

Bueno, sobrecarga es un caso.

Un vector de punteros compartidos hará una gran cantidad de copias extrañas que implican la creación de un nuevo puntero inteligente, el incremento de una referencia, la disminución de una referencia, etc. en un cambio de tamaño. Todo esto se evita con un contenedor de puntero.

Requiere perfil para asegurar que las operaciones del contenedor sean el cuello de botella sin embargo :)

Todos sabemos que los punteros RAW deben estar envueltos en algún tipo de puntero inteligente para obtener la administración de memoria segura de Exception. Pero cuando se trata de contenedores de punteros, el problema se vuelve más espinoso.

Los contenedores estándar insisten en que el objeto contenido se puede copiar, por lo que se descarta el uso de std :: auto_ptr, aunque aún se puede usar boost :: shared_ptr, etc.

Pero también hay algunos contenedores de impulso diseñados explícitamente para mantener los indicadores de forma segura:
Consulte Biblioteca de contenedores de punteros

La pregunta es: ¿bajo qué condiciones debería preferir usar ptr_containers sobre un contenedor de smart_pointers?

boost::ptr_vector<X> or std::vector<boost::shared_ptr<X> >


Steady on: los punteros inteligentes son un método muy bueno para manejar la administración de recursos, pero no el único. Estoy de acuerdo en que verá muy pocos punteros crudos en un código C ++ bien escrito, pero en mi experiencia tampoco ve muchos punteros inteligentes. Hay muchas clases perfectamente a prueba de excepciones implementadas usando contenedores de punteros sin procesar.


Los contenedores de punteros Boost tienen una propiedad estricta de los recursos que poseen. Un std :: vector <boost :: shared_ptr <X >> tiene propiedad compartida. Hay razones por las que puede ser necesario, pero en caso de que no lo sea, aumentaría automáticamente :: ptr_vector <X>. YMMV.