2012-10-06 36 views
6

C++類成員的生命期是什麼?例如,在什麼時候Foo對象的std::fstream將被釋放?當進入析構函數或離開析構函數時?這是在C++標準中定義的嗎?C++類成員的生存期

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

回答

11

mystream數據成員是Foo對象的破壞中被破壞,被執行的~Foo()主體之後。 C++ 11§12.4[class.dtor]/8的狀態:

執行析構函數的主體和破壞人體內分配的任何自動對象之後,對於X類析構函數調用析構X的直接非變體非靜態數據成員,X的直接基類的析構函數,如果X是最派生類的類型,則其析構函數調用X的虛擬基類的析構函數。

mystreamFoo一個非變體,非靜態數據成員(一個變體數據成員是聯合的成員; Foo不是聯合)。

2

它是構造的反向:

結構:基類,數據成員(mystream這裏構造的),構造體

破壞:析構體,(在這裏被破壞mystream)數據成員,基類