Temporäre Objektzerstörung in C
Man könnte sich fragen, wann temporäre Objekte, die durch Wertargumente für Funktionsaufrufe oder Konstruktoren erstellt werden, zerstört werden. Der genaue Zeitpunkt ihres Untergangs ist entscheidend für die korrekte Ausführung von Code mit temporär zugewiesenen Entitäten.
Um das Problem zu veranschaulichen, betrachten Sie das folgende Beispiel:
#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'; }
Würde dieser Code gedruckt werden „ eins zwei drei"? Nicht unbedingt. Das Verhalten hängt vom C-Compiler und den jeweiligen Einstellungen ab, die für die Kompilierung verwendet werden.
Gemäß dem C-Standard ([class.temporary] p4) dauert die Lebensdauer eines temporären Objekts bis zum Ende des vollständigen Ausdrucks, den es erstellt hat in. Im bereitgestellten Beispiel ist der vollständige Ausdruck die gesamte Hauptfunktion. Daher erfolgt die Zerstörung der temporären Foo-Objekte am Ende von main, was der beobachteten Druckreihenfolge entspricht.
[class.temporary] p5, p6 und p7 definieren jedoch mehrere Ausnahmen von dieser allgemeinen Regel . Beispielsweise kann die Lebensdauer temporärer Objekte bei der Initialisierung von Arrays verkürzt werden. Darüber hinaus kann das Binden eines Verweises an ein temporäres Objekt oder dessen Verwendung in einem For-Range-Initialisierer dessen Lebensdauer verlängern.
Zusammenfassend lässt sich sagen, dass der genaue Zeitpunkt der temporären Objektzerstörung in C durch den Standard geregelt wird. Während temporäre Dateien in den meisten Fällen am Ende des Ausdrucks, der sie erstellt hat, zerstört werden, können bestimmte Ausnahmen und Compileroptimierungen dieses Verhalten ändern. Das Verständnis dieser Nuancen ist für das Schreiben korrekten und vorhersehbaren C-Codes unerlässlich.
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!