Kann
ausgeführt werden?string
Destruktor des temporären Objekts vor dem Aufruf vonprintPointer
?
Nein, weil temporäre Objekte als letzter Schritt bei der Auswertung des Full-Expressions zerstört werden, der den Punkt enthält, an dem sie erstellt wurden, was bedeutet, dass er bis zum Aufrufen von printPointer()
bestehen bleibt .
Von den Standard # 12.2 / 4 Temporären Objekten [class.temporary] :
Temporäre Objekte werden als letzter Schritt bei der Auswertung des vollständigen Ausdrucks ([intro.execution]) gelöscht, der (lexikalisch) den Punkt enthält, an dem sie erstellt wurden.
Und # 12.2 / 6 Temporäre Objekte [class.temporary] :
Ein temporäres Objekt, das an einen Referenzparameter in einem Funktionsaufruf ([expr.call]) gebunden ist, bleibt bis zum Abschluss des vollständigen Ausdrucks bestehen, der den Aufruf enthält.
Ihre Zeichenfolge wird erst am Ende des Programms zerstört, da s1
eine Referenz darauf ist (also nicht in func
zerstört wird). In Func
gibt es keinen Wertnachweis oder Rückgabewert. Kein Problem in diesem Code.
Tags und Links c++ language-lawyer object-lifetime destructor temporary