如果一个类的函数被定义为虚函数,那么这个类的析构函数也应该要定义虚函数,否则在删除对象时会出现子类对象没有被删除的现象,出现内存泄露。
如下代码所示:
#include<iostream>
using namespace std;
class A
{
public:
virtual void print(){cout<<"a"<<endl;}
A(){cout<<"基类A的构造函数被执行\n"; }
//virtual ~A(){cout<<"基类A的析构函数执行\n"; }
~A(){cout<<"基类A的析构函数执行\n"; }
} ;
class B:public A
{
public:
void print(){cout<<"b"<<endl;}
B(){cout<<"子类B的构造函数被执行\n"; }
~B(){cout<<"子类B的析构函数执行。\n"; }
};
int main()
{
A *pa = new B;
pa->print();
delete pa;
return 0;
}