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[]>());