- 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_ptrveraltet. Der Rat ist voll gültig.
In C ++ wird 0x std::auto_ptrzugunsten von veraltet std::unique_ptr. Die Wahl des intelligenten Zeigers hängt von Ihrem Anwendungsfall und Ihren Anforderungen ab. Die std::unique_ptrVerschiebungssemantik für Einzelbesitz kann in Containern verwendet werden (mithilfe der Verschiebungssemantik) und std::shared_ptrwenn 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_ptrist C ++ 0x veraltet und Sie sollten unique_ptrstattdessen verwenden. Aus dem neuesten Standardentwurf (n3035), Abschnitt D.9
Die Klassenvorlage
auto_ptrist 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_ptrveraltet , 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_shuffleund 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_ptrautomatisch konvertieren , indem Sie unique_ptrstattdessen Folgendes verwenden:
Jeder verwendete Code
auto_ptrkann mechanisch in "using " konvertiert werdenunique_ptr, wobei ermove()eingefügt wird, wennauto_ptrer "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_ptrist 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.