7

C++クラスメンバーの存続期間はどのくらいですか。たとえばstd::fstreamFooオブジェクトのはいつリリースされますか?デストラクタに入るとき、またはデストラクタを出るとき?これはC++標準で定義されていますか?

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

2 に答える 2

12

データメンバーは、の本体が実行された、オブジェクトのmystream破棄中に破棄されます。C++11§12.4[class.dtor]/8の状態:Foo~Foo()

デストラクタの本体を実行し、本体内に割り当てられた自動オブジェクトを破棄した後、クラスのデストラクタは、の直接の非バリアント非静的データメンバーのデストラクタ、の直接の基本クラスのXデストラクタを呼び出します。最も派生したクラスのタイプであるそのデストラクタは、の仮想基本クラスのデストラクタを呼び出します。XXXX

mystreamは、の非バリアント、非静的データメンバーですFooバリアントデータメンバーはユニオンのメンバーです。ユニオンでFooはありません)。

于 2012-10-06T22:08:20.377 に答える
3

それは構造の逆です:

構築:基本クラス、データメンバー(mystreamここで構築)、コンストラクター本体

破壊:デストラクタ本体、データメンバー(mystreamここで破壊)、基本クラス

于 2012-10-06T22:13:55.123 に答える