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_ptra unstd::vector
o
- ir con un
shared_arrayapunta 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
-
+permitepush_backtiempo constante amortizado -
-introduce un nivel extra de indirección sobrestd::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.