我知道类对象的完成顺序如下:
- 执行析构函数体
- 销毁对象(即释放用于数据成员的内存)
现在有人问我派生类对象的终结顺序。我想它是完全一样的,但是在执行上述步骤之后,基类对象的析构函数是否也被调用了?
我不这么认为,但想确定考试。
谢谢你的帮助 :)
我知道类对象的完成顺序如下:
现在有人问我派生类对象的终结顺序。我想它是完全一样的,但是在执行上述步骤之后,基类对象的析构函数是否也被调用了?
我不这么认为,但想确定考试。
谢谢你的帮助 :)
析构函数的调用顺序与构造相反。这意味着在派生类的析构函数之后会自动调用基类的析构函数。
举个例子:
class Foo
{
protected:
SomeType var;
public:
~Foo() {}
};
class Baz : public Foo
{
public:
~Baz()
{
var.doSomething();
}
};
如果基类 Foo的析构函数在 Baz 类的析构函数之前被调用,那么对象var将被销毁(它的析构函数将在 Foo 的销毁时自动调用)并且您将进入未定义行为的领域。
这是对为什么以这种方式调用析构函数的简单直观的解释。