Zerstörung temporärer Objekte in C
Wann werden temporäre Objekte in C zerstört? Diese Frage stellt sich, wenn man den folgenden Codeausschnitt betrachtet:
#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'; }
Der Code gibt „eins“, „zwei“ und „drei“ aus. Dieses Verhalten könnte unerwartet erscheinen, wenn temporäre Objekte unmittelbar nach ihrer Erstellung zerstört würden. Dies ist jedoch nicht der Fall.
Temporäre Objekte, wie in [class.temporary] p4 definiert, werden am Ende des vollständigen Ausdrucks zerstört, der den Punkt enthält, an dem sie erstellt wurden. Im obigen Beispiel ist der vollständige Ausdruck die gesamte Hauptfunktion, daher werden die temporären Foo-Objekte am Semikolon zerstört.
Dieses Verhalten ist standardmäßig garantiert und sorgt dafür, dass die Ausgabe des angegebenen Codes über alle C-Compiler hinweg konsistent ist. Es gibt jedoch einige Ausnahmen von der allgemeinen Regel:
Das obige ist der detaillierte Inhalt vonWann werden temporäre Objekte in C zerstört?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!