[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
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).
Vielen Dank für die Erklärung. Dass mit der Kopie beim Return war mir nicht mehr ganz klar gewesen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.