请考虑以下几点:
class base{
base();
~base();
}:
class derived : public base{
};
当派生类没有定义析构函数时,当派生对象被析构时,基类析构函数是否会自动调用?
否则,如果我在派生类中也有析构函数,我是否必须显式调用基类析构函数?
class base{
base();
~base();
}:
class derived : public base{
derived();
~derived{
base::~base(); //do I need this?
}
};
原文由 Heisenbug 发布,翻译遵循 CC BY-SA 4.0 许可协议
在这种情况下会自动调用基类析构函数; 你不需要调用它。
但是,请注意, _当通过
delete
在基类指针上销毁对象并且析构函数不是virtual
时,结果将是未定义的行为_(尽管您可能不会崩溃)。在任何要派生的类中,始终将析构函数声明为
virtual
。如果基类不需要有析构函数,则包含一个virtual
无论如何,它的主体为空。对于边缘情况,上述规则有一个例外: _如果您的派生类不需要支持多态破坏_,那么析构函数不需要是
virtual
。在这种情况下,改为protected
是正确的; 更多细节在这里,但请注意,这在实践中很少发生。