unique_ptr smart punteros make_shared inteligentes c++ c++11 smart-pointers

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?