虚析构函数
来源:互联网 发布:遗传算法求八皇后问题 编辑:程序博客网 时间:2024/05/17 01:14
虚析构函数就是为了当删除一个派生类对象的时候,派生类的析构函数被调用。。。
vs2013编译的一个程序:
头文件:default.h
#include <iostream>#include <cstring>using namespace std;class CBase{public:CBase();virtual ~CBase();};class CDerived : public CBase{public:CDerived(char *str);~CDerived();private:char *name;};
函数实现:
function.cpp
#include "default.h"CBase::CBase(){cout << "构造函数CBase被调用!!" << endl;}CBase::~CBase(){cout << "析构函数CBase被调用!!" << endl;}CDerived::CDerived(char *str){name = new char[strlen(str) + 1];strcpy_s(name,strlen(str)+1 ,str); //这里的strcpy_s一定要是三个参数cout << "构造函数CDerived被调用!!" << endl;}CDerived::~CDerived(){cout << "析构函数CDerived被调用!!" << endl;if (name){delete []name;name = NULL;}}
主函数:
main.cpp
#include "default.h"int main(int argc, char* argv []){CDerived derived("ding");CBase *p1 = &derived;cout << "----------强制析构----------------" << endl;p1->~CBase();cout << "----------new CDerived------------" << endl;CBase *p2 = new CDerived("zheng");delete p2;cout << "----------delete CDerived---------" << endl;return 0;}
执行代码的结果:
当我们把
class CBase{public:CBase();virtual ~CBase();};
修改为
class CBase{public:CBase();~CBase();};
把virtual去掉之后编译的结果:
明显可以看出不用虚析构函数之后,当我们删除派生类CDerived的对象p2的时候,它的析构函数没有被调用!
这里就会造成内存泄露。
而且也不是所有的类都要虚析构函数,一般只用于基类。
- 虚析构函数、纯虚析构函数
- 虚析构函数,纯虚析构函数~~~
- 构造函数 虚函数 虚析构函数
- 虚析构函数、纯虚析构函数、虚构造函数
- 纯虚函数、虚函数、虚析构函数
- 虚析构函数、纯虚析构函数、虚构造函数
- 虚函数,虚析构函数,虚函数表
- 虚析构函数、纯虚析构函数、虚构造函数
- 虚析构函数
- 虚析构函数
- 虚析构函数
- 虚析构函数
- 虚析构函数
- 虚析构函数
- 虚析构函数
- 虚析构函数
- 虚析构函数
- 虚析构函数
- 编程之美1.3 一摞烙饼的排序
- mac下如何设置终端root用户密码
- Windows操作系统I/O模型—笔记3(事件选择(WSAEventSelect)模型)
- 查看oracle用户数据库连接数
- hdu 4485
- 虚析构函数
- Windows操作系统I/O模型—笔记4(完成端口(Completion Port)模型+线程池技术)
- HDU4003:Find Metal Mineral(树形DP)
- hdu 1232 畅通工程
- 详解spring事务属性 from iteye
- Linux,RTEMS,eCos,uCOSII等
- 经典面试,链表相关的问题
- Windows 窗体风格
- poj 1509 Glass Beads