免费手机建站平台,wordpress子目录,做360效果图网站,工作室官网源码析构函数#xff1a; 1.析构函数不能被重载#xff1b; 2.析构函数可以是虚函数#xff1b; 3.析构函数没有参数#xff0c;没有返回值#xff1b; 4.当类对象的生命周期结束#xff0c;系统会自动调用析构函数#xff1b; 5.若没有显式的析构函数#xff0c;系统会调用…析构函数 1.析构函数不能被重载 2.析构函数可以是虚函数 3.析构函数没有参数没有返回值 4.当类对象的生命周期结束系统会自动调用析构函数 5.若没有显式的析构函数系统会调用默认的析构函数 下面记录一下一个小示例目的是说明虚析构函数的必要性。若析构函数不是虚函数会发生什么vs2010下创建控制台输出程序下面看代码以及运行实例 classObject.cpp
#include stdafx.h
#include iostream
using namespace std;class Base
{
public:Base(){cout构造函数Base()endl;};~Base(){cout析构函数~Base()endl;}//基类的析构函数不是虚析构函数
protected:
private:
};class Inherit:public Base
{
public:Inherit(){cout构造函数Inherit()endl;}~Inherit(){cout析构函数Inherit()endl;}
protected:
private:
};int _tmain(int argc, _TCHAR* argv[])
{Base *base new Inherit;delete base;//下面3行代码是一个小插曲作者记录下来巩固基础int a[] {12,13,23,4,5};coutsizeof(*a)sizeof(*a)endl;cout*a*aendl;//*a是数组a的第一个元素sizeof(*a)即整型的大小 4system(pause);return 0;
}运行上面的代码控制台输出结果是 可以看出析构函数调用的时候只调用了父类的析构函数没有调用子类的析构函数即没有释放子类的对象无形中造成内存泄漏下面我们来将父类的析构函数定义为虚析构即在父类的析构函数前加关键字virtual将父类析构函数改为下面这样其它不变。 Base(){cout析构函数Base()endl;}//基类的析构函数是虚析构函数 编译运行程序结果如下 总结当一个类作为父类的时候最好将此类的析构函数定义为虚析构函数。