C ++类成员的生命周期

时间:2012-10-06 22:05:17

标签: c++ raii

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

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

2 个答案:

答案 0 :(得分:11)

mystream数据成员在Foo对象销毁期间销毁, 执行~Foo()主体后销毁。 C ++11§12.4[class.dtor] / 8州:

  

执行析构函数体并销毁正文中分配的任何自动对象后,类X的析构函数调用X的直接非变量非静态数据成员的析构函数, X直接基类的析构函数,如果X是派生类最多的类型,则析构函数调用X的虚基类的析构函数。

mystreamFoo的非变体,非静态数据成员(变体数据成员是联合的成员; Foo是不是工会)。

答案 1 :(得分:2)

这与构造相反:

  

构造:基类,数据成员(此处构造mystream),构造函数体

     

破坏:析构函数体,数据成员(此处销毁mystream),基类