一、存在原因
当父类的指针指向子类的对象,子类如果申请了堆空间,父类的析构函数释放不到,
造成内存泄漏。因此需要将父类的析构函数声明为虚函数或纯虚函数。
二、虚析构示例
声明两个类,父类Father,子类Son,他们其中分别有一个指针成员(f_num与s_num),在各自的构造函数中new初始化。
首先,当Father类型的指针指向Son类型的对象时,如果没有将父类的析构方法声明为virtual,则会出现以下情况:
#include <iostream>
#include <string>
using namespace std;
class Father {
public :
int *f_num;
Father() {
f_num = new int(666);
cout << "Father constructor" << endl;
}
~Father() { //此时还没有将父类析构函数设置为虚函数
if(f_num != NULL) {
delete f_num;
f_num = NULL;
}
cout << "Father