C++类成员的生存期
Lifetime of C++ class members
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
的虚拟基类的析构函数。
mystream
是 Foo
的非变量、非静态数据成员(变量数据成员是联合的成员; Foo
不是工会)。
这是结构的反面:
构造:基类,数据成员(此处构造
mystream
),构造函数体销毁:析构函数体、数据成员(此处
mystream
销毁)、基类
相关文章:
- GCC对可能有效的代码抛出init list生存期警告
- 在不复制临时对象的情况下延长其生存期
- 结束另一个线程中使用的对象的生存期
- "this"指针的值在对象的生存期内是否恒定?
- 创建具有全局生存期的 UObject
- C++17 和静态临时生存期的参考扩展
- 数组对象的生存期是否在重用其元素存储时结束?
- 共享指针生存期
- 具有空洞初始化的对象的生存期
- 如何在向量列表初始化时避免对象复制以及如何延长临时的生存期
- 指针引用的生存期(以 C++为单位)
- dll 中静态成员变量的生存期
- C++临时对象成员函数的生存期
- 成员重新值引用和对象生存期
- 传递给存储常量引用的成员的临时对象的生存期
- C++类成员的生存期
- 管理由"std::bind"绑定的成员函数的生存期
- 将数据成员的生存期限制为一个方法
- 对对象的数据成员的shared_ptr是否使数据成员在对象的生存期之后保持活动状态
- 单例类的成员变量的生存期是多少?