Heim >Backend-Entwicklung >C++ >Warum werden temporäre Objekte in C in überraschender Reihenfolge zerstört?
Temporäre Objektzerstörung in C
Der bereitgestellte Code zeigt ein überraschendes Verhalten, bei dem temporäre Objekte in einer unerwarteten Reihenfolge zerstört werden. Dieses Verhalten wird jedoch tatsächlich durch den C-Standard garantiert.
Erklärung
Temporäre Objekte, die auch als unbenannte Objekte bezeichnet werden, werden erstellt, wenn ein Ausdruck zu a ausgewertet wird Klassentyp, der kein Referenztyp ist. Sie werden normalerweise verwendet, um Zwischenergebnisse während der Auswertung eines Ausdrucks zu speichern.
Im angegebenen Code wird ein temporäres Objekt vom Typ Foo aus einem Zeichenfolgenliteral erstellt und sein Destruktor wird aufgerufen, wenn die Lebensdauer des Objekts endet. Der Destruktor gibt den im m_name-Member des Objekts gespeicherten Namen aus.
Die Lebensdauer eines temporären Objekts endet am Ende des vollständigen Ausdrucks, in dem es erstellt wurde. Im bereitgestellten Code ist der vollständige Ausdruck die Anweisung:
Foo{ "one" };
Daher endet die Lebensdauer des temporären Objekts mit dem auf diese Anweisung folgenden Semikolon. Als Ergebnis wird der Destruktor des temporären Objekts aufgerufen und die Zeichenfolge „one“ ausgegeben.
Ausnahmen von der Regel
Während die allgemeine Regel dies vorschreibt Temporäre Objekte werden am Ende des vollständigen Ausdrucks zerstört. Es gibt einige Ausnahmen, die im C-Standard ([class.temporary] p5-p7) festgelegt sind:
Diese Ausnahmen ermöglichen mehr Flexibilität bei der Verwaltung der Lebensdauer temporärer Objekte in bestimmten Situationen.
Das obige ist der detaillierte Inhalt vonWarum werden temporäre Objekte in C in überraschender Reihenfolge zerstört?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!