这个要提一下,如果记不住就记住:如果不做虚析构函数,会有内存泄漏
解释
定义一个基类的指针p,在delete p时,如果基类的析构函数是虚函数,这时只会看p所赋值的对象,如果p赋值的对象是派生类的对象,就会调用派生类的析构函数;如果p赋值的对象是基类的对象,就会调用基类的析构函数,这样就不会造成内存泄露。
如果基类的析构函数不是虚函数,在delete p时,调用析构函数时,只会看指针的数据类型,而不会去看赋值的对象,这样就会造成内存泄露。
多少学点设计模式就清楚了。
代码语言:javascript复制#include <iostream>
using namespace std;
class Base{
//此处省去,一切从简
};
//接下来是一个子类
class Inherit :public Base{
//此处省去,一切从简
};
//重点看调用
int main()
{
Base *p = new Inherit; //这种方式的调用,这时候有没有虚析构就不一样了
delete p;
Base *q = new Base;
delete q;
return 0;
}