#include <iostream>
class a{
public:
a(){};
virtual ~a(){
std::cout << "del class a";
}
};
class b: public a{
public:
~b(){
std::cout << "del class b";
}
};
int main(){
a *pa;
pa = new b;
delete pa;
}嗨,我是C++的新手。查看上面的代码示例,class b没有虚拟析构函数,但是当程序执行时,输出是del class b,然后是del class a。
我想知道为什么会这样,因为我还没有在class b中创建虚拟析构函数。这是否意味着通过将基析构函数声明为virtual,派生类的“虚拟性”是隐含的?谢谢。
发布于 2020-02-02 17:35:17
即使析构函数不是继承的,如果基类声明它的析构函数是虚的,派生的析构函数总是重写它。这使得通过指向base的指针来删除多态类型的动态分配对象成为可能。
您可以在Cppreference-Virtual destructor中找到更多信息
https://stackoverflow.com/questions/60024768
复制相似问题