Ho ricevuto un errore del compilatore e ho notato qualcosa di interessante. Per qualche ragione unique_ptr
ha un sovraccarico per auto_ptr
, ma ho pensato auto_ptr
è stata sconsigliata:Perché unique_ptr ha un sovraccarico per auto_ptr?
/usr/local/include/c++/4.9.0/bits/unique_ptr.h:228:2:
note:template<class _Up, class>
std::unique_ptr<_Tp, _Dp>::unique_ptr(std::auto_ptr<_Up>&&)
unique_ptr(auto_ptr<_Up>&& __u) noexcept;
/usr/local/include/c++/4.9.0/bits/unique_ptr.h:228:2:
note: template argument deduction/substitution failed:
main.cpp:41:67: note: mismatched types 'std::auto_ptr<T>' and 'char*'
È questo a causa della compatibilità con il codice che utilizza auto_ptr
?
In aggiunta alla retrocompatibilità con il codice che utilizza 'auto_ptr', funge anche da strumento di transizione per passare da' auto_ptr' a 'unique_ptr'. Non è necessario eseguire la transizione di un'intera base di codice contemporaneamente. Puoi farlo in un pezzo alla volta, usando questa conversione per spostarti oltre il confine di transizione. Detto questo, i rapporti sul campo hanno indicato un buon tasso di successo semplicemente facendo una ricerca/sostituzione globale e quindi indagando sui guasti in fase di compilazione, come metodo di transizione. –