ada*_*603 3 c++ destructor operator-precedence
想象一下这样的一个类:
class foo {
public:
foo() : _bar{new bar}, _baz{new baz} {}
private:
unique_ptr<bar> _bar;
unique_ptr<baz> _baz;
};
Run Code Online (Sandbox Code Playgroud)
因此,每当一个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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2472 次 |
| 最近记录: |