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

Posted 看,未来

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++编程经验:为虚基类做虚析构函数的必要性相关的知识,希望对你有一定的参考价值。

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

解释

定义一个基类的指针p,在delete p时,如果基类的析构函数是虚函数,这时只会看p所赋值的对象,如果p赋值的对象是派生类的对象,就会调用派生类的析构函数;如果p赋值的对象是基类的对象,就会调用基类的析构函数,这样就不会造成内存泄露。

如果基类的析构函数不是虚函数,在delete p时,调用析构函数时,只会看指针的数据类型,而不会去看赋值的对象,这样就会造成内存泄露。

多少学点设计模式就清楚了。

#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;
}

以上是关于C++编程经验:为虚基类做虚析构函数的必要性的主要内容,如果未能解决你的问题,请参考以下文章

C++中的各种“虚“-- 虚函数纯虚函数虚继承虚基类虚析构纯虚析构抽象类讲解

C++中的各种“虚“-- 虚函数纯虚函数虚继承虚基类虚析构纯虚析构抽象类讲解

第六篇:为多态基类声明虚析构函数

C++学习24 虚析构函数

虚析构函数(c++常问问题五)

为多态基类声明一个虚析构函数