2014-09-27 15 views
5

Ich habe einen Compilerfehler und bemerkte etwas Interessantes. Aus irgendeinem Grund unique_ptr hat eine Überlastung für auto_ptr, aber ich dachte auto_ptr veraltet war:Warum hat unique_ptr eine Überladung für 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*' 

Ist dies wegen der Rückwärtskompatibilität mit Code, der auto_ptr verwendet?

+0

Neben der Rückwärtskompatibilität mit Code, der 'auto_ptr' verwendet, dient er auch als Übergangswerkzeug, um von 'auto_ptr' zu 'unique_ptr' zu wechseln. Man muss nicht die gesamte Codebasis auf einmal umwandeln. Sie können dies Stück für Stück tun, indem Sie diese Umwandlung verwenden, um über die Übergangsgrenze zu gelangen. Abgesehen davon haben Feldberichte eine gute Erfolgsrate bei der Durchführung einer globalen Suche/Ersetzung und der Untersuchung von Kompilierungsfehlern als der Methode des Übergangs angezeigt. –

Antwort

2

Ja, es ist für Interop mit auto_ptr, und veralteten Mitteln (nach der Norm)

Normative für die aktuelle Ausgabe der Norm, aber nicht garantiert Teil des Standard in zukünftigen Revisionen zu sein.