2014-09-27 11 views
5

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?

+0

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. –

risposta

2

Sì, è per l'interoperabilità con auto_ptr e mezzi obsoleti (secondo lo standard)

normativo per la corrente edizione della norma, ma non garantiti a far parte dello Standard in future revisioni.