C++类成员的生存期

Lifetime of C++ class members

本文关键字:生存期 成员 C++      更新时间:2023-10-16

C++类成员的生存期是多少。例如,Foo对象的std::fstream将在什么时候释放?进入析构函数还是离开析构函数?这是在C++标准中定义的吗?

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

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

在执行析构函数的主体

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

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

这是结构的反面:

构造

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

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