c++ - smart - unique_ptr VS auto_ptr
smart pointers c++ (1)
std::auto_ptr<T>
puede robar silenciosamente el recurso. Esto puede ser confuso y se intentó definir std::auto_ptr<T>
para no permitirle hacer esto. Con std::unique_ptr<T>
propiedad no se transferirá de forma silenciosa desde cualquier cosa que aún tengas. Transfiere la propiedad solo de los objetos para los que no tiene un controlador (temporales) o que están a punto de desaparecer (objeto a punto de salir del ámbito de una función). Si realmente desea transferir la propiedad, usaría std::move()
:
std::unique_ptr<bar> b0(new bar());
std::unique_ptr<bar> b1(std::move(b0));
Posible duplicado:
std :: auto_ptr a std :: unique_ptr
¿Qué implementaciones de C ++ Smart Pointer están disponibles?
Digamos que tengo esta struct
:
struct bar
{
};
Cuando uso auto_ptr de esta manera:
void foo()
{
auto_ptr<bar> myFirstBar = new bar;
if( )
{
auto_ptr<bar> mySecondBar = myFirstBar;
}
}
luego en auto_ptr<bar> mySecondBar = myFirstBar;
C ++ transfiere la propiedad de myFirstBar a mySecondBar y no hay ningún error de compilación.
Pero cuando uso unique_ptr en lugar de auto_ptr obtengo un error del compilador. ¿Por qué C ++ no permite esto? ¿Y cuáles son las principales diferencias entre estos dos punteros inteligentes? Cuando necesito usar que?