类数据成员的销毁顺序
Destruction order of class data members?
想象一下这样的类:
class foo {
public:
foo() : _bar{new bar}, _baz{new baz} {}
private:
unique_ptr<bar> _bar;
unique_ptr<baz> _baz;
};
因此,每当foo
的实例被销毁时,如果这是定义的行为,那么它的数据成员将以什么顺序被销毁?
假设_baz
确实取决于_bar
的存在,也许它使用了_bar
拥有的一些资源(假设它知道_bar
对象,即使构造函数没有反映这一点)。因此,在这种情况下,如果_bar
首先被销毁(当它要销毁foo
时),那么_baz
可能会尝试访问_bar
的销毁程序释放的一些资源。
一个显而易见的解决方案是在foo
中实现一个析构函数,它可以按正确的顺序手动释放_baz
和_bar
,但如果没有实现析构函数呢?是否有定义数据成员销毁顺序的默认行为?
数据成员的销毁顺序与其声明顺序相反,与范围内声明的变量相同:
{
// a, b constructed in that order
bar a;
baz b;
} // b, a destroyed in that order
相关文章:
- 用于访问容器<T>数据成员的正确 API
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 数据成员SFINAE的C++17测试:gcc vs clang
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 如何在c++中定义以struct为数据成员的类中的构造函数
- 静态数据成员模板专用化的实例化点在哪里
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 使用指针访问数组中的对象数据成员
- 友元函数无法访问私有数据成员 (c++)
- 我可以在 C++ 中将数据成员/变量从其定义之外添加到结构中吗?
- 为什么将一个结构的引用设置为等于另一个结构只会更改一个数据成员?
- 将私有数据成员添加到野牛生成的类中
- 输入数据成员未按要求工作
- 二维矢量数据成员
- 在类 A 中创建类型为 B 类的向量 - 访问数据 [C++] [成员在两个类中都是私有的]
- 调用在 HXX 文件中声明的静态数据成员
- 使用初始化列表时的 C++ 数据成员初始化顺序
- 类数据成员的销毁顺序
- 类C++的静态函数成员中的静态数据成员初始化顺序
- 静态数据成员初始化顺序