1. 父类的destructor是非虚函数
#include <iostream>
using namespace std;
class A
{
public:
~A()
{
cout << "I am in A" << endl;
}
};
class B:public A
{
public:
~B()
{
cout << "I am in B" << endl;
}
};
int main()
{
A* a = new B();
delete a;
}
运行结果,
>> ./a.out
I am in A
2. 父类的destructor是虚函数
>> cat dest.C
#include <iostream>
using namespace std;
class A
{
public:
virtual ~A()
{
cout << "I am in A" << endl;
}
};
class B:public A
{
public:
~B()
{
cout << "I am in B" << endl;
}
};
int main()
{
A* a = new B();
delete a;
}
运行结果:
>> ./a.out
I am in B
I am in A
we should use virtual destructors if we call delete on a base class pointer which points to a derived class.