C ++类成员的生命周期是多少。例如,std::fstream
对象的Foo
何时会被释放?进入析构函数或离开析构函数时?这是在C ++标准中定义的吗?
struct Foo
{
std::fstream mystream;
~Foo()
{
// wait for thread writing to mystream
}
};
答案 0 :(得分:11)
mystream
数据成员在Foo
对象销毁期间销毁, 执行~Foo()
主体后销毁。 C ++11§12.4[class.dtor] / 8州:
执行析构函数体并销毁正文中分配的任何自动对象后,类
X
的析构函数调用X
的直接非变量非静态数据成员的析构函数,X
直接基类的析构函数,如果X
是派生类最多的类型,则析构函数调用X
的虚基类的析构函数。
mystream
是Foo
的非变体,非静态数据成员(变体数据成员是联合的成员; Foo
是不是工会)。
答案 1 :(得分:2)
这与构造相反:
构造:基类,数据成员(此处构造
mystream
),构造函数体破坏:析构函数体,数据成员(此处销毁
mystream
),基类