c++ boost stl shared-ptr raii

c++ - ¿Por qué usar uno frente al otro: `boost:: shared_array` VS` boost:: shared_ptr<std:: vector> `?



stl shared-ptr (2)

Entonces, para lidiar con grandes cantidades de memoria, ya sea para una imagen o similar, hay muchas opciones.

Como soy fanático de los punteros inteligentes y RAII, me pregunto si es más inteligente ir con:

  • un shared_ptr a un std::vector

o

  • ir con un shared_array apunta a un conjunto dinámicamente asignado.

¿Cuáles son las implicaciones conceptuales, prácticas y de rendimiento de elegir uno frente al otro?


shared_ptr to std::vector

  • + permite push_back tiempo constante amortizado
  • - introduce un nivel extra de indirección sobre std::vector

shared_array

  • + no introduce un nivel extra de indirección
  • - no permite la adición de tiempo constante amortizado, a menos que lo implemente usted mismo, lo que de nuevo tomaría un nivel adicional de indirección.

Es lo mismo que comparar std :: vector vs. C array.

Piense en shared_array como una matriz RAII C. Lo que obtienes es simplemente desasignación de memoria automática. Es útil en casos en los que se trata de un código de terceros que devuelve matrices. Teóricamente es más rápido que std :: vector en algunos casos extremos, pero mucho menos flexible y menos seguro.

std :: vector es probablemente la mejor opción.