#include <iostream>
using namespace std;
class A
{
public:
A()
{
cout << "我是A的构造函数" << endl;
}
virtual ~A()//~A()
{
cout << "我是A的析构函数" << endl;
}
void fun()
{
cout << "-------------我是分割线------------" << endl;
}
protected:
private:
};
class B :public A
{
public:
B()
{
cout << "我是B的构造函数" << endl;
}
~B()
{
cout << "我是B的析构函数" << endl;
}
};
int main()
{
B b;
A *p = new B;
p->fun();
delete(p);
system("pause");
return 0;
}
当A的析构函数声明为虚函数时,代码运行结果如下:
当A的析构函数为普通函数时,代码运行结果如下:
对比可得出,将基类的析构函数定义为虚函数后,利用delete删除一个指向派生类的对象指针时,系统会自动调用基类和派生类的析构函数。而没有定义为虚函数时,系统只会调用基类的析构函数。