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 unstd::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
-
+
permitepush_back
tiempo 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.