std::auto_ptre std::unique_ptrsão incompatíveis em alguns aspectos e uma queda na substituição em outros. Portanto, nenhuma localização / substituição não é boa o suficiente. No entanto, após um trabalho de localização / substituição, os erros de compilação devem corrigir tudo, exceto casos de canto estranhos. A maioria dos erros de compilação exigirá a adição de um std::move.
- Variável do escopo da função:
100% compatível, desde que você não o passe por valor para outra função.
- Tipo de retorno:
não é 100% compatível, mas 99% compatível não parece errado.
- Parâmetro de função por valor:
100% compatível com uma ressalva, unique_ptrs deve ser passado por uma std::movechamada. Este é simples, pois o compilador reclamará se você não acertar.
- Parâmetro de função por referência:
100% compatível.
- Variável de membro da classe:
Essa é complicada. std::auto_ptrAs cópias semânticas são más. Se a classe não permitir a cópia, haverá std::unique_ptruma queda na substituição. No entanto, se você tentou dar à classe uma semântica de cópia razoável, precisará alterar o std::auto_ptrcódigo de manipulação. Isso é simples, pois o compilador reclamará se você não acertar. Se você permitiu a cópia de uma classe com um std::auto_ptrmembro sem código especial, tenha vergonha e boa sorte.
Em resumo, std::unique_ptré ininterrupto std::auto_ptr. Ele não permite comportamentos em tempo de compilação que geralmente eram erros ao usar a std::auto_ptr. Portanto, se você usou std::auto_ptros cuidados necessários, a mudança para std::unique_ptrdeve ser simples. Se você confiou no std::auto_ptrcomportamento estranho de, precisa refatorar seu código de qualquer maneira.