Heim > Backend-Entwicklung > C++ > Wann werden temporäre Objekte in C zerstört?

Wann werden temporäre Objekte in C zerstört?

Susan Sarandon
Freigeben: 2024-11-26 09:27:10
Original
292 Leute haben es durchsucht

When Do Temporary Objects in C   Get Destroyed?

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';
}
Nach dem Login kopieren

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:

  • Standardmäßig erstellte temporäre Objekte in Array-Initialisierern können ihre Lebensdauer verkürzen.
  • Standardargumente für Konstruktoren während des Array-Kopierens können ebenfalls verkürzt werden ihre Lebensdauer verkürzt.
  • Das Binden einer Referenz an temporäre Objekte verlängert ihre Lebensdauer.
  • Temporäre Objekte in einem for-range-initializer haben eine verlängerte Lebensdauer.

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!

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