Heim > Artikel > Backend-Entwicklung > Ist die Zerstörungsreihenfolge temporärer Objekte in C garantiert?
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'; }
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:
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!