std::auto_ptry std::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 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_ptrs debe pasar a través de una std::movellamada. 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_ptrLas semánticas de copia son malvadas. Si la clase no permite copiar, entonces std::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 el std::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 un std::auto_ptrmiembro sin ningún código especial, entonces, qué vergüenza y buena suerte.
En resumen, std::unique_ptres 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_ptrcon el cuidado que necesitaba, cambiar a std::unique_ptrdebería ser simple. Si confió en std::auto_ptrel comportamiento extraño, entonces necesita refactorizar su código de todos modos.