Heim > Backend-Entwicklung > C++ > Hauptteil

Ist die Zerstörungsreihenfolge temporärer Objekte in C garantiert?

Susan Sarandon
Freigeben: 2024-11-12 07:49:01
Original
886 Leute haben es durchsucht

Is the Destruction Order of Temporary Objects Guaranteed in C  ?

Zerstörung temporärer Objekte in C

Unter Berücksichtigung des folgenden Codes:

#include <iostream>

struct Foo
{
    const char* m_name;

    ~Foo() { std::cout << m_name << '\n'; }
};

int main()
{
    Foo foo{"three"};
    Foo{"one"};   // unnamed object
    std::cout << "two" << '\n';
}
Nach dem Login kopieren

Es ist offensichtlich, dass die Ausgabe dies tun wird „eins“, „zwei“ und „drei“ sein. Dies wirft die Frage auf: Ist dieses Verhalten bei allen C-Compilern garantiert?

Gemäß dem C-Standard heißt es in [class.temporary]:

„Temporäre Objekte werden als letztes zerstört.“ Schritt bei der Auswertung des vollständigen Ausdrucks, der (lexikalisch) den Punkt enthält, an dem sie erstellt wurden.“

Diese Regel impliziert, dass temporäre Objekte, wie z. B. die unbenannten Foo-Objekte im bereitgestellten Code werden am Ende des vollständigen Ausdrucks, in dem sie erstellt wurden, zerstört, d. h. am Semikolon am Ende der Zeile.

Es ist wichtig zu beachten, dass es hiervon Ausnahmen gibt Allgemeine Regel, beschrieben in [class.temporary] p5, p6 und p7:

  1. Verkürzung der Lebensdauer standardmäßig erstellter temporärer Objekte im Array Initialisierer.
  2. Verkürzung der Lebensdauer von Standardargumenten für Konstruktoren beim Array-Kopieren.
  3. Verlängerung der Lebensdauer temporärer Objekte durch Bindung eines Verweises an sie.
  4. Verlängerung der Lebensdauer temporärer Objekte Objekte in einem „for-range-initializer“.

Im bereitgestellten Code gibt es jedoch keine dieser Ausnahmen gelten, um die garantierte Zerstörung temporärer Objekte am Ende ihrer jeweiligen Ausdrücke sicherzustellen.

Das obige ist der detaillierte Inhalt vonIst die Zerstörungsreihenfolge temporärer Objekte in C garantiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage