C++類成員的生命期是什麼?例如,在什麼時候Foo
對象的std::fstream
將被釋放?當進入析構函數或離開析構函數時?這是在C++標準中定義的嗎?C++類成員的生存期
struct Foo
{
std::fstream mystream;
~Foo()
{
// wait for thread writing to mystream
}
};
C++類成員的生命期是什麼?例如,在什麼時候Foo
對象的std::fstream
將被釋放?當進入析構函數或離開析構函數時?這是在C++標準中定義的嗎?C++類成員的生存期
struct Foo
{
std::fstream mystream;
~Foo()
{
// wait for thread writing to mystream
}
};
的mystream
數據成員是Foo
對象的破壞中被破壞,被執行的~Foo()
主體之後。 C++ 11§12.4[class.dtor]/8的狀態:
執行析構函數的主體和破壞人體內分配的任何自動對象之後,對於
X
類析構函數調用析構X
的直接非變體非靜態數據成員,X
的直接基類的析構函數,如果X
是最派生類的類型,則其析構函數調用X
的虛擬基類的析構函數。
mystream
是Foo
一個非變體,非靜態數據成員(一個變體數據成員是聯合的成員; Foo
不是聯合)。
它是構造的反向:
結構:基類,數據成員(
mystream
這裏構造的),構造體破壞:析構體,(在這裏被破壞
mystream
)數據成員,基類