C++类成员的生命周期

Man*_*uel 7 c++ raii

C++类成员的生命周期是多少.例如,std::fstream某个Foo对象何时会被释放?进入析构函数或离开析构函数时?这是在C++标准中定义的吗?

struct Foo
{
    std::fstream mystream;
    ~Foo()
    {
        // wait for thread writing to mystream
    }
};
Run Code Online (Sandbox Code Playgroud)

Jam*_*lis 12

mystream数据成员的破坏中被破坏Foo对象,之后的主体~Foo()被执行.C++11§12.4[class.dtor]/8州:

在执行析构函数的主体并销毁在主体内分配的任何自动对象之后,类X的析构函数调用析构函数X的直接非变量非静态数据成员,X直接基类的析构函数,如果X是最派生类的类型,它的析构函数调用析构函数X的虚拟基类.

mystreamFoo(变量数据成员是联合的成员; Foo不是联合)是非变体的非静态数据成员.