auto_ptr und get?
-
Ich hab mir nen guten Artikel über auto_ptr zur Gemüte geführt, habe jedoch noch eine Frage, die sich mir stellt, angekommen, ich habe diesen Code:
auto_ptr<T> foo(){ auto_ptr<T> p(new T); return p; } int main() { T * t = foo().get(); }Was passiert eigentlich? Wieso ist t gültig? in main gibt es doch keine Instanz vom auto_ptr mehr, sehe ich doch richtig? Und müsste der pointer nach der Methode nicht gelöscht werden weil keine auto_ptr instanz mehr existiert? Mit get hat mir auto_ptr doch nicht die ownership übergeben
-
Wieso sollte t hier gültig sein. So wie ich das sehe erstellt foo ein temporäres auto_ptr-Objekt dessen internen Zeiger du dann t zuweist.
-
foo().get();auto_ptr<T> foo()...Würde ich mal sagen, dass das ein gültiges Objekt in main hinterlässt..
(Nicht 100% sicher, müsste das mal überprüfen..)
-
Das temporäre Objekt, welches in main erzeugt wird und den Besitz des auto_ptr aus foo() übernimmt, wird nach dem Ausdruck zerstört. Damit ist t danach nicht mehr gültig.
-
Also ich sehe aber den Inhalt des Pointers in Main, wenn ich den Debugger drauf ansetze. Die Frage ist, wo ist der auto_ptr mit dem ownership
-
Seikilos schrieb:
Also ich sehe aber den Inhalt des Pointers in Main
Undefiniertes Verhalten bedeutet auch nicht, dass Du ihn auf keinen Fall mehr siehst.
Die Frage ist, wo ist der auto_ptr mit dem ownership
Zerstört.
-
Zum Zeitpunkt der Initialisierung von t ist der Zeiger noch gültig und das Objekt lebt - nach Beendigung der Auswertung des Ausdrucks zeigt er aber auf eine Leiche.