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的虚拟基类的析构函数。
mystreamFoo是(变体数据成员是联合的成员;Foo不是联合)的非变体、非静态数据成员。
这是构造的反面:
构造:基类、数据成员(
mystream此处构造)、构造函数体销毁:析构函数体、数据成员(
mystream在此处销毁)、基类