Wann sterben temporäre Funktionsargumente?
Wenn in C ein temporäres Objekt als Argument für eine Funktion erstellt wird, wird der Compiler automatisch aktiviert verwaltet seine Lebensdauer. Dies wirft die Frage auf: An welchem Punkt wird der Destruktor des temporären Objekts garantiert aufgerufen?
Gemäß dem C-Standard werden temporäre Objekte am Ende des vollständigen Ausdrucks, zu dem sie gehören, zerstört. Hier ist ein vollständiger Ausdruck ein Ausdruck, der kein Unterausdruck eines anderen Ausdrucks ist. Es endet normalerweise mit dem Semikolon (;) oder der schließenden Klammer () von Kontrollflussanweisungen (z. B. if, while, switch).
Im bereitgestellten Beispiel:
class MyClass { MyClass(int a); }; myFunction(MyClass(42));
Die Das als Funktionsargument erstellte temporäre MyClass-Objekt wird zerstört, nachdem die Funktionsaufrufanweisung endet, d. h. wenn das Semikolon angetroffen wird. Daher können Sie davon ausgehen, dass der Destruktor aufgerufen wird, bevor nachfolgende Anweisungen ausgeführt werden.
Es ist erwähnenswert, dass die Lebensdauer von Temporären mithilfe von Konstantenverweisen verlängert werden kann. Durch die Bindung eines Temporärs an eine konstante Referenz wird seine Lebensdauer verlängert, um der der Referenz zu entsprechen:
MyClass getMyClass(); { const MyClass& r = getMyClass(); // full expression ends here ... } // object returned by getMyClass() is destroyed here
Diese Technik kann unnötige Kopierkonstruktionen einsparen und gleichzeitig den von einer Funktion zurückgegebenen Wert beibehalten, insbesondere bei der Optimierung des Rückgabewerts ist nicht anwendbar. Mit dem Aufkommen der Bewegungssemantik in C 11 hat ihr Nutzen jedoch etwas abgenommen.
Das obige ist der detaillierte Inhalt vonWann genau werden temporäre C-Funktionsargumente zerstört?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!