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.


Anmelden zum Antworten