【发布时间】:2012-10-06 22:05:17
【问题描述】:
C++ 类成员的生命周期是多少。比如Foo对象的std::fstream什么时候会被释放?进入析构函数时还是离开析构函数时?这是在 C++ 标准中定义的吗?
struct Foo
{
std::fstream mystream;
~Foo()
{
// wait for thread writing to mystream
}
};
【问题讨论】:
C++ 类成员的生命周期是多少。比如Foo对象的std::fstream什么时候会被释放?进入析构函数时还是离开析构函数时?这是在 C++ 标准中定义的吗?
struct Foo
{
std::fstream mystream;
~Foo()
{
// wait for thread writing to mystream
}
};
【问题讨论】:
mystream 数据成员在Foo 对象的销毁过程中被销毁,~Foo() 的主体被执行。 C++11 §12.4[class.dtor]/8 状态:
在执行析构函数的主体并销毁主体内分配的所有自动对象后,类
X的析构函数调用X的直接非变体非静态数据成员的析构函数,@ 的析构函数987654326@ 的直接基类,如果X是最派生类的类型,则其析构函数调用X的虚拟基类的析构函数。
mystream 是Foo 的非变体、非静态数据成员(变体 数据成员是联合的成员;Foo 不是联合)。
【讨论】:
这是构造的逆向:
构造:基类、数据成员(
mystream在这里构造)、构造函数体析构:析构函数体、数据成员(
mystream在这里被销毁)、基类
【讨论】:
string *name,那么name就是在一个方法中声明的指针,超出方法名会被销毁,那么类的*name呢?