7

C++ 类成员的生命周期是多少。例如,什么时候释放std::fstream一个对象的 ?Foo进入析构函数时还是离开析构函数时?这是在 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的析构函数调用X的直接非变体非静态数据成员的析构函数,调用X的直接基类的析构函数,如果X是最派生类的类型,它的析构函数调用X的虚拟基类的析构函数。

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

于 2012-10-06T22:08:20.377 回答
3

这是构造的反面:

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

销毁:析构函数体、数据成员(mystream在此处销毁)、基类

于 2012-10-06T22:13:55.123 回答