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!
-
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*
-
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