C++编程经验(2):为虚基类做虚析构函数的必要性

2021-09-18 11:42:59 浏览数 (1)

这个要提一下,如果记不住就记住:如果不做虚析构函数,会有内存泄漏

解释

定义一个基类的指针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;
}

0 人点赞