c++11 memory-management boost wrapper smart-pointers

c++11 - ¿Tiene C++ 11 envoltorios para matrices asignadas dinámicamente como scoped_array de Boost?



memory-management wrapper (2)

A menudo necesito tratar arreglos asignados dinámicamente en C ++, y por lo tanto confío en Boost para scoped_array, shared_array y similares. Después de leer las preguntas más frecuentes sobre C ++ 11 de Stroustrup y la Wiki de referencia de C ++ 11 , no pude encontrar un reemplazo adecuado para estas envolturas de matriz dinámica proporcionadas por el estándar C ++ 11. ¿Hay algo que haya pasado por alto, o tengo que seguir confiando en Boost?

¡Muchas gracias por su ayuda!


En la medida en que los vectores están pensados ​​como envoltorios de matriz, ¿qué ocurre si utiliza un puntero inteligente adecuado con el vector como objeto interno?


Hay una especialización de unique_ptr , como unique_ptr<T[]> .

#include <iostream> #include <memory> struct test { ~test() { std::cout << "test::dtor" << std::endl; } }; int main() { std::unique_ptr<test[]> array(new test[3]); }

Cuando lo ejecutes, recibirás estos mensajes.

test::dtor test::dtor test::dtor

Si desea usar shared_ptr , debe usar std::default_delete<T[]> para eliminar, ya que no tiene uno como shared_ptr<t[]> .

std::shared_ptr<test> array(new test[3], std::default_delete<test[]>());