Was ist ein std::unique_ptr<> ???
-
Wo ist der Vorteil gegenüber einer simplen new/delete Anweisung?
Wäre für eine Antwort dankbar
-
Das ist ein sogenannter Smart-Pointer - und er hat den Vorteil, daß das Objekt, auf das er zeigt auf jeden Fall freigegeben wird, egal auf welche Weise du den umliegenden Scope verlässt (return, break, goto, throw,...).
-
sumsum1 schrieb:
Wo ist der Vorteil gegenüber einer simplen new/delete Anweisung?
Wäre für eine Antwort dankbar
Bei Exceptiosn werden sie unglaublich stark.
Foo* f1=new Foo; Foo* f2=new Foo;//diese Zeile könnte eine Exception werfen => Speicherloch tuwas(f1,f2); delete f2; delete f1;Und auch nett bei Funktionsargumenten oder -Rückgaben, bei Memberzeigern, überhaupt recht praktisch.
-
CStoll schrieb:
Das ist ein sogenannter Smart-Pointer - und er hat den Vorteil, daß das Objekt, auf das er zeigt auf jeden Fall freigegeben wird, egal auf welche Weise du den umliegenden Scope verlässt (return, break, goto, throw,...).
Danke. Das ist schon einmal sehr aufschlussreich. Warum dann diese Namenskonvention? Unique hat doch etwas mit "einzigartig" zu tun?! Ich hatte eigentlich sowas wie singleton im Sinn..?!
-
"unique" steht für "ich bin der einzige, der auf dieses Objekt verweist" - daneben gibt es auch "shared_ptr" ("es kann mehrere Zeiger geben, die auf das selbe Objekt verweisen - und der letzte räumt es auf").
-
Danke an euch für die kompetente Beratung

-
...wobei hier eher der "Besitz" gemeint ist, also "unique ownership" und "shared ownerwhip". Unter Ownership versteht man in diesem Kontext, dass das Besitzer-Objekt, für die Verwaltung/Löschung zuständig ist. Ein unique_ptr fühlt sich sozusagen verantwortlich für das, worauf er zeugt. Ein shared_ptr teilt sich diese Verantwortung ggf mit anderen shared_ptr-Instanzen.