Objekt auf Stack überlebt return? o.O

#1347685
Lesenswert?

[Nachtrag:    C++ ]
Hier:
http://pastebin.com/m49568856
wird eine Objekt-Instanz result (Z.6.) auf dem Stack angelegt und bei 
(Z.12.) zurückgegeben.

Warum musste es nicht mit new auf dem Heap erzeugt werden, damit das 
neue Objekt den return überlebt?

Der ganze Code:
http://doc.trolltech.com/4.1/widgets-tetrix.html
#1347690
Lesenswert?

Mit
1
TetrixPiece result;
wird eine lokale Variable auf dem Stack angelegt; deren Lebensdauer
endet mit dem Ende des umgebenden Blocks. Sie kann also nicht
zurückgegeben werden - und wird es auch nicht.
Es kommt ja noch:
1
return result;
Weil deine Methode als Rückgabetyp TetrixPiece hat, wird vom
Compiler klammheimlich eine Kopie von result angelegt, die wird
zurückgegeben und beim Aufrufer irgendwann entsorgt (tatsächlich wird
beim Aufruf bereits dafür Platz auf dem Stack als versteckter
nullter Parameter geschaffen und mit den restlichen Parametern nach
dem Rücksprung entsorgt). Alles in Ordnung.

Hättest du als Rückgabetyp nicht TetrixPiece, sondern TetrixPiece&
(also eine Referenz), dann gäbe es Probleme, weil der Aufrufer
ein Objekt in der Hand hat, dessen Lebensdauer beendet ist und
der Stackbereich dafür bereits für etwas anderes verwendet
wird (möglicherweise).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren