2012-10-06 19 views
6

Qual è la durata di un membro della classe C++. Ad esempio, in quale momento verrà rilasciato lo std::fstream di un oggetto Foo? Quando si entra nel distruttore o quando si lascia il distruttore? È definito nello standard C++?Durata dei membri della classe C++

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

risposta

11

L'elemento di dati mystream viene distrutta durante la distruzione dell'oggetto Foo, dopo il corpo di ~Foo() viene eseguita. C++ 11 §12.4 [class.dtor]/8 stati:

Dopo l'esecuzione del corpo del distruttore e distruggere qualsiasi oggetto automatici allocati all'interno del corpo, un distruttore per la classe X chiede distruttori per X 's membri di dati non statici diretti non varianti, i distruttori per le classi di base dirette di X e, se X è il tipo della classe più derivata, il suo distruttore chiama i distruttori per le classi di base virtuali di X.

mystream è un non-variante, membro di dati non statica di Foo (una variante membro dati è un membro di un'unione; Foo non è un'unione).

2

è il contrario di costruzione:

costruzione: classi di base, i membri di dati (mystream costruito qui), corpo del costruttore

distruzione: corpo destructor, componenti di dati (mystream distrutti qui), classi di base

Problemi correlati