Con la llegada del nuevo estándar (y partes ya disponibles en algunos compiladores), std::unique_ptrse supone que el nuevo tipo es un reemplazo std::auto_ptr.
¿Su uso se superpone exactamente (por lo que puedo hacer una búsqueda / reemplazo global en mi código (no es que lo haría, pero si lo hiciera)) o debería estar al tanto de algunas diferencias que no son evidentes al leer la documentación?
Además, si es un reemplazo directo, ¿por qué darle un nuevo nombre en lugar de solo mejorarlo std::auto_ptr?
fuente

std::auto_ptrystd::unique_ptrson incompatibles en algunos aspectos y una caída en el reemplazo en otros. Por lo tanto, no buscar / reemplazar no es lo suficientemente bueno. Sin embargo, después de buscar / reemplazar el trabajo a través de los errores de compilación, debería solucionar todo, excepto los casos extraños de esquina. La mayoría de los errores de compilación requerirán agregar astd::move.100% compatible, siempre que no lo pase por valor a otra función.
no es 100% compatible, pero 99% compatible no parece incorrecto.
100% compatible con una advertencia,
unique_ptrs debe pasar a través de unastd::movellamada. Este es simple ya que el compilador se quejará si no lo hace bien.100% compatible.
esta es complicada.
std::auto_ptrLas semánticas de copia son malvadas. Si la clase no permite copiar, entoncesstd::unique_ptrhay una caída en el reemplazo. Sin embargo, si trató de darle a la clase una semántica de copia razonable, deberá cambiar elstd::auto_ptrcódigo de manejo. Esto es simple ya que el compilador se quejará si no lo hace bien. Si permitiste copiar una clase con unstd::auto_ptrmiembro sin ningún código especial, entonces, qué vergüenza y buena suerte.En resumen,
std::unique_ptres un ininterrumpidostd::auto_ptr. No permite en tiempo de compilación comportamientos que a menudo eran errores al usar astd::auto_ptr. Entonces, si lo usóstd::auto_ptrcon el cuidado que necesitaba, cambiar astd::unique_ptrdebería ser simple. Si confió enstd::auto_ptrel comportamiento extraño, entonces necesita refactorizar su código de todos modos.fuente
AFAIK,
unique_ptrno es un reemplazo directo. El principal defecto que corrige es la transferencia implícita de propiedad.Por otro lado,
unique_ptrtendrá capacidades completamente nuevas: se pueden almacenar en contenedores.fuente
auto_ptrno se permiten contenedores de .Herb Sutter tiene una buena explicación sobre GotW # 89 :
En otras palabras, si bien una búsqueda y reemplazo global puede "romper" su código temporalmente, debe hacerlo de todos modos: puede tomar algún tiempo corregir los errores de compilación, pero a la larga le ahorrará muchos más problemas.
fuente