Heim >Backend-Entwicklung >C++ >Warum werden temporäre Objekte in C in überraschender Reihenfolge zerstört?

Warum werden temporäre Objekte in C in überraschender Reihenfolge zerstört?

DDD
DDDOriginal
2024-11-13 08:54:02337Durchsuche

Why Are Temporary Objects Destroyed in a Surprising Order in C  ?

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:

  • Verkürzung der Lebensdauer von standardmäßig erstellten temporären Objekten Objekte in Initialisierern von Arrays.
  • Verkürzung der Lebensdauer von Standardargumenten für Konstruktoren, während ein Array kopiert wird.
  • Verlängerung der Lebensdauer temporärer Objekte durch Bindung einer Referenz an sie.
  • Verlängern der Lebensdauer temporärer Objekte in einem For-Range-Initialisierer.

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!

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