Rückgabe von std::auto_ptr



  • Hallo zusammen,

    ich habe ne Funktion:

    std::auto_ptr<MyClass> getObject();
    

    Jetzt will ich auf dem Objekt nur eine Methode aufrufen.
    Das kann ich natürlich so machen:

    std::auto_ptr<myClass> ptr = o.getObject();
    MyClass* my = ptr.get();
    my->func();
    

    Krieg ich das auch als "Einzeiler" hin?

    o.getObject().get()->func();
    

    So klappt es nicht (vermutlich, weil der Destruktor des std::auto_ptr vorher aufgerufen wird)

    Mit release wird natürlich leider das Objekt nicht mehr freigegeben 😞

    Geht es wirklich nicht als Einzeiler?

    Gruß
    *Cpp-Anfänger*



  • Der Sinn dieser Smart-Pointer ist doch grade, dass sie sich wie normale Pointer verwenden lassen. Demnach ist auch der -> und der *-Operator überladen.



  • Danke!


  • Mod

    Cpp-Anfänger schrieb:

    Krieg ich das auch als "Einzeiler" hin?

    o.getObject().get()->func();
    

    So klappt es nicht.

    So geht es auch.



  • o.getObject().get()->func();
    

    Bei mir geht es so nicht...

    Vielleicht sind deinem Objekt alle Inhalt auf dem Stack und der wurde noch nicht
    überschrieben.

    Bei einem Zugriff auf ein Heap-Objekt, das im Destruktor gelöscht wird,
    legt er sich auf die Nase...

    Gruß,
    *Cpp-Anfänger*


  • Mod

    Cpp-Anfänger schrieb:

    o.getObject().get()->func();
    

    Bei mir geht es so nicht...

    Dann ist dein Compiler hoffnungslos kaputt.



  • Sollte nicht eigentlich sogar

    o.getObject()->func();

    funktionieren?

    edit: btw. "funktioniert nicht" ist keine sehr aussagekräftige Beschreibung. Was ist denn die konkrete Fehlermeldung?



  • Jester schrieb:

    Sollte nicht eigentlich sogar

    o.getObject()->func();

    funktionieren?

    Funktioniert ja auch, deswegen auch gleich der Dank an The-Kenny.

    "Geht nicht" ist wirklich keine aussagekräftige Fehlermeldung ^^
    Hab nen Segmentation Fault gekriegt.
    Lag aber wohl an etwas anderem, jedenfalls kann ich ihn nicht mehr reproduzieren.

    thx an alle


Anmelden zum Antworten