temporäre shared_ptr, wann wirds gelöscht?
-
hallo,
wenn ein shared_ptr als Variable nicht mehr existiert und dann dereferenziert wird, wird das Objekt dann noch vor dem Aufruf gelöscht bzw. kann dies passieren? z.B.
shared_ptr(new bar())->foo();der -> Operator gibt ja erstmal nur einen Pointer zurück, sodass dann doch kein shared_ptr Objekt mehr existieren sollte, sodass das Objekt dann gelöscht wird und foo() mit undefined behaviour aufgerufen wird, das ist zumindest mein Verständnis. Seh ich das richtig?
-
.yeanno schrieb:
Seh ich das richtig?
Nein. Das temporäre shared_ptr Objekt existiert bis der komplette Ausdruck bis zum semikolon abgearbeitet wurde. Also auch der foo-Aufruf.
-
okay, eine etwas kompliziertere Situation:
ein vector hält shared_ptrs, auf eines der enthaltenen Objekte wird dann eine Funktion aufgerufen, die eine Referenz auf den Container nimmt und sich selbst raus löscht. Da vector mit dem Indexoperator dann eine Referenz zurückgibt und das Objekt aus dem vector gelöscht wurde, wird der shared_ptr dann während dem Ausführen der Funktion noch gelöscht?