为什么使用虚函数时普通的析构函数不调用呢

来源:百度知道 编辑:UC知道 时间:2024/06/12 00:29:34
#include <iostream>
using namespace std;
class A
{
public:
A(){cout << "A" << endl;}
virtual ~A(){cout << "~A" << endl;}
};
class B : public A
{
public:
B(){cout << "B" << endl;}
~B(){cout << "~B" << endl;}
};
int main()
{
A *p = new B;
delete p;
return 0;
}
像这个把virtual去掉就只输出
A
B
~A

不是虚函数的话编译器就静态决定用哪个, 既然p的类型是A*, 静态决定的话肯定就是用A类的析构函数了

貌似 c++就是这样规定的.
所以想不让被继承..析构就不声明成虚的

虚方法是会被子类override的,只有实例自己对象中被使用