博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++析构函数定义为虚函数(转载)
阅读量:7115 次
发布时间:2019-06-28

本文共 765 字,大约阅读时间需要 2 分钟。

转载:

析构函数执行时先调用派生类的析构函数,其次才调用基类的析构函数。如果析构函数不是虚函数,而程序执行时又要通过基类的指针去销毁派生类的动态对象,那么用delete销毁对象时,只调用了基类的析构函数,未调用派生类的析构函数。这样会造成销毁对象不完全。

1 #include
2 #include
3 4 class CPerson 5 { 6 public: 7 virtual ~CPerson(); //基类的析构函数必须声明为虚函数,否则 8 9 用delete销毁对象时会出错10 protected:11 char * m_lpszName;12 char * m_lpszSex;13 };14 15 class CStudent:public CPerson16 {17 public:18 ~CStudent(); //virtual可加也可不加19 protected:20 int m_iNumjber; //学号21 };22 23 CPerson::~CPerson()24 {25 cout<<"~CPerson!"<

输出:

~Student!

~CPerson!

CStudent对象已经完成析构

~Student!

~CPerson!

 

如果去掉~CPerson()前面的virtual,且将“CStudent对象已经完成析构”改为“CStudent对象未完成析构”。程序的执行结果为:

~CPerson!

CStudent对象未完成析构

~Student!

~CPerson!

你可能感兴趣的文章
python时间模块小结
查看>>
BZOJ3997:[TJOI2015]组合数学(DP,Dilworth定理)
查看>>
C# Application.DoEvents() 处理队列消息,防界面假死。
查看>>
python基础===python实现截图
查看>>
Django模型
查看>>
Quartus中代码字体大小的调整方法
查看>>
配置url防盗链、目录权限访问控制Directory、文件访问权限控制FilesMatch
查看>>
【spring boot】4.spring boot配置多环境资源文件
查看>>
关于datepicker如何获取月中日长
查看>>
神经网络练习四-ex4
查看>>
通用for_each清理容器模板函数
查看>>
MVC5发布到IIS,出现HTTP 错误 404.0 - Not Found的完美解决方法
查看>>
c# 与 java 语法异同
查看>>
cleanup failed because the file not under version control问题的解决
查看>>
html+css+js实现滑动导航条(转载)
查看>>
BZOJ 2039人员雇佣
查看>>
angular ng-repeat出来的数据 每条修改数据后返回给接口 如何取到每个对应修改的值...
查看>>
nodeJs express mongodb 建站(linux 版)
查看>>
java使用websocket,并且获取HttpSession,源码分析
查看>>
odoo开发笔记 -- 视图继承扩展
查看>>