析构函数未设置为虚函数时
#include<iostream>
using namespace std;
class A
{
public:
~A()
{
cout<<"~A\n";
}
};
class B:public A
{
public:
~B()
{
cout<<"~B\n";
}
};
int main()
{
A *p=new B;
delete p;
return 0;
}
- 运行
析构函数设置为虚函数时
#include<iostream>
using namespace std;
class A
{
public:
virtual ~A()
{
cout<<"~A\n";
}
};
class B:public A
{
public:
virtual ~B()
{
cout<<"~B\n";
}
};
int main()
{
A *p=new B;
delete p;
return 0;
}
- 运行
结论
- 基类析构函数未设置为虚函数时,通过基类指针释放派生类对象时,仅调用基类析构函数。
- 类析构函数设置为虚函数时,通过基类指针释放派生类对象时,先调用父类析构函数,后调用基类析构函数。(这里与其他虚函数的override有些区别)