2012-10-06 8 views
6

Wie ist die Lebensdauer eines C++ - Klassenmembers. Zum Beispiel, zu welcher Zeit wird die std::fstream eines Foo Objekts freigegeben werden? Bei der Eingabe des Destruktors oder beim Verlassen des Destruktors? Ist das im C++ Standard definiert?Lebensdauer von C++ - Klassenmitgliedern

struct Foo 
{ 
    std::fstream mystream; 
    ~Foo() 
    { 
     // wait for thread writing to mystream 
    } 
}; 

Antwort

11

Das mystream Datenelement während der Zerstörung des Foo Objekt zerstört, nach der Körper ~Foo() ausgeführt wird. C++ 11 §12.4 [class.dtor]/8 Zustände:

Nachdem den Körper des destructor ausführen und zerstören alle automatischen Objekte innerhalb des Körpers zugeordnet ist, eine Klasse für destructor X rufen die Destruktoren für X ‚s direkte non-variante nicht statische Datenmember, die Destruktoren für die direkten Basisklassen X und, wenn X der Typ der am weitesten abgeleiteten Klasse ist, ruft sein Destruktor die Destruktoren für die virtuellen Basisklassen X auf.

mystream ist ein nicht-Variante, nicht-statisches Datenelement von Foo (a Variante Datenelement ist ein Element einer Überwurf; Foo ist keine Union).

2

Es ist das Gegenteil von dem Bau:

Konstruktion: Basisklassen, Datenelemente (mystream hier aufgebaut), Konstruktorrumpf

Zerstörung: Destruktorimplementierung, Datenelemente (mystream hier zerstört), Basisklassen