std::auto_ptr
y std::unique_ptr
son 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 a std::move
.
- Variable del alcance de la función:
100% compatible, siempre que no lo pase por valor a otra función.
- Tipo de retorno:
no es 100% compatible, pero 99% compatible no parece incorrecto.
- Parámetro de función por valor:
100% compatible con una advertencia, unique_ptr
s debe pasar a través de una std::move
llamada. Este es simple ya que el compilador se quejará si no lo hace bien.
- Parámetro de función por referencia:
100% compatible.
- Variable miembro de clase:
esta es complicada. std::auto_ptr
Las semánticas de copia son malvadas. Si la clase no permite copiar, entonces std::unique_ptr
hay una caída en el reemplazo. Sin embargo, si trató de darle a la clase una semántica de copia razonable, deberá cambiar el std::auto_ptr
código de manejo. Esto es simple ya que el compilador se quejará si no lo hace bien. Si permitiste copiar una clase con un std::auto_ptr
miembro sin ningún código especial, entonces, qué vergüenza y buena suerte.
En resumen, std::unique_ptr
es un ininterrumpido std::auto_ptr
. No permite en tiempo de compilación comportamientos que a menudo eran errores al usar a std::auto_ptr
. Entonces, si lo usó std::auto_ptr
con el cuidado que necesitaba, cambiar a std::unique_ptr
debería ser simple. Si confió en std::auto_ptr
el comportamiento extraño, entonces necesita refactorizar su código de todos modos.