Heim >Backend-Entwicklung >C++ >Wann genau werden temporäre C-Funktionsargumente zerstört?

Wann genau werden temporäre C-Funktionsargumente zerstört?

Susan Sarandon
Susan SarandonOriginal
2025-01-04 17:09:44291Durchsuche

When Exactly Do C   Temporary Function Arguments Get Destroyed?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn