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