C++ 类成员的生命周期是多少。例如,什么时候释放std::fstream
一个对象的 ?Foo
进入析构函数时还是离开析构函数时?这是在 C++ 标准中定义的吗?
struct Foo
{
std::fstream mystream;
~Foo()
{
// wait for thread writing to mystream
}
};
数据成员在对象的销毁过程中被销毁,在mystream
执行主体之后。C++11 §12.4[class.dtor]/8 状态:Foo
~Foo()
在执行析构函数的主体并销毁主体内分配的任何自动对象后,类
X
的析构函数调用X
的直接非变体非静态数据成员的析构函数,调用X
的直接基类的析构函数,如果X
是最派生类的类型,它的析构函数调用X
的虚拟基类的析构函数。
mystream
Foo
是(变体数据成员是联合的成员;Foo
不是联合)的非变体、非静态数据成员。
这是构造的反面:
构造:基类、数据成员(
mystream
此处构造)、构造函数体销毁:析构函数体、数据成员(
mystream
在此处销毁)、基类