C++クラスメンバーの存続期間はどのくらいですか。たとえばstd::fstream、Fooオブジェクトのはいつリリースされますか?デストラクタに入るとき、またはデストラクタを出るとき?これはC++標準で定義されていますか?
struct Foo
{
std::fstream mystream;
~Foo()
{
// wait for thread writing to mystream
}
};
データメンバーは、の本体が実行された後、オブジェクトのmystream破棄中に破棄されます。C++11§12.4[class.dtor]/8の状態:Foo~Foo()
デストラクタの本体を実行し、本体内に割り当てられた自動オブジェクトを破棄した後、クラスのデストラクタは、の直接の非バリアント非静的データメンバーのデストラクタ、の直接の基本クラスの
Xデストラクタを呼び出します。最も派生したクラスのタイプであるそのデストラクタは、の仮想基本クラスのデストラクタを呼び出します。XXXX
mystreamは、の非バリアント、非静的データメンバーですFoo(バリアントデータメンバーはユニオンのメンバーです。ユニオンでFooはありません)。
それは構造の逆です:
構築:基本クラス、データメンバー(
mystreamここで構築)、コンストラクター本体破壊:デストラクタ本体、データメンバー(
mystreamここで破壊)、基本クラス