- Wird auto_ptr im eingehenden C ++ - Standard veraltet sein?
- Sollte unique_ptr anstelle von shared_ptr für die Eigentumsübertragung verwendet werden?
- Wenn unique_ptr nicht im Standard enthalten ist, muss ich stattdessen shared_ptr verwenden?
Antworten:
UPDATE: Diese Antwort wurde 2010 geschrieben und ist wie erwartet std::auto_ptr
veraltet. Der Rat ist voll gültig.
In C ++ wird 0x std::auto_ptr
zugunsten von veraltet std::unique_ptr
. Die Wahl des intelligenten Zeigers hängt von Ihrem Anwendungsfall und Ihren Anforderungen ab. Die std::unique_ptr
Verschiebungssemantik für Einzelbesitz kann in Containern verwendet werden (mithilfe der Verschiebungssemantik) und std::shared_ptr
wenn der Besitz gemeinsam genutzt wird.
Sie sollten versuchen, den intelligenten Zeiger zu verwenden, der am besten zur Situation passt. Wenn Sie den richtigen Zeigertyp auswählen, erhalten andere Programmierer Einblick in Ihr Design.
Ja, ab heute auto_ptr
ist C ++ 0x veraltet und Sie sollten unique_ptr
stattdessen verwenden. Aus dem neuesten Standardentwurf (n3035), Abschnitt D.9
Die Klassenvorlage
auto_ptr
ist veraltet. [Hinweis: Die Klassenvorlageunique_ptr
(20.9.10) bietet eine bessere Lösung. - Endnote]
Bis zur Ratifizierung des Standards ist es immer möglich, dass der Ausschuss diese Entscheidung revidiert, obwohl ich der Meinung bin, dass dies für diese Entscheidung unwahrscheinlich ist.
In C ++ 11 (D.10, Seite 1228) ist dies nicht nur auto_ptr
veraltet , sondern wird auch in einer zukünftigen Version von C ++ gelöscht :
Angenommen N4190, und tatsächlich entfernt (nicht nur veraltet) mehr archaischen Dinge aus der C ++ Standard - Bibliothek, einschließlich
auto_ptr
,bind1st
/bind2nd
,ptr_fun
/mem_fun
/mem_fun_ref
,random_shuffle
und ein paar mehr. Diese werden jetzt alle aus dem Entwurf der C ++ 17-Standardbibliothek entfernt und sind nicht Teil des zukünftigen portablen C ++.
Ein weiteres Dokument dazu: Programmiersprache C ++, Arbeitsgruppe Library Evolution - Dokument N4190 , wenn Sie weitere Informationen wünschen.
Sie können jeden Code auto_ptr
automatisch konvertieren , indem Sie unique_ptr
stattdessen Folgendes verwenden:
Jeder verwendete Code
auto_ptr
kann mechanisch in "using " konvertiert werdenunique_ptr
, wobei ermove()
eingefügt wird, wennauto_ptr
er "kopiert" wurde.
Nein, es ist nicht veraltet. Es kann sein, dass C ++ 0x jemals akzeptiert wird. Und es wird realistisch immer unterstützt. Ich glaube nicht, dass veraltete Funktionen jemals aus realen C ++ - Implementierungen entfernt wurden.
auto_ptr
ist Teil des Standards, wird aber wesentlich weniger verwendet. Aus praktischer Sicht wird die Entfernung drastisch weniger Auswirkungen haben.
<iostream.h>
als jemals zuvorauto_ptr
, aber MS VC ++ (zum einen) bietet es nicht mehr an.