每个人都知道基类的析构函数通常是虚的。但是派生类的析构函数是什么呢?在 C + + 11中,我们有关键字“覆盖”和显式使用默认析构函数的能力。
struct Parent
{
std::string a;
virtual ~Parent()
{
}
};
struct Child: public Parent
{
std::string b;
~Child() override = default;
};
在 Child 类的析构函数中同时使用关键字“覆盖”和“ = default”是否正确?在这种情况下,编译器会生成正确的虚析构函数吗?
如果是,那么我们是否可以认为这是一种很好的编码风格,并且我们应该总是以这种方式声明派生类的析构函数,以确保基类的析构函数是虚的?