在类中delete自己会不会有问题??
2016-02-17 21:09
148 查看
这个问题很多人都在问,很多人有不同答案,有一点是可以肯定,就是千万别在析构函数中调用delete this,因为会造成死递归(delete this调用后会再次调用析构函数,再次delete this...),但是如果在其他地方调用delete this会不会出问题?有种说法是只要你delete this 后不再使用任何该类的成员变量调用该类的任何成员函数不会有问题。这看起来也确实比较符合逻辑。但是任何事一定要亲身测试才能知道真相。邓小平同志说过实践是检验真理的唯一标准。最近项目中恰好我就用了一下这个特性,结果是delete this在任何地方都会有问题。 我是在vs2008下开发的,项目中由于不能用boost(领导吐槽boost太大了),vs2008下只支持c++98标准还不支持c++11以后特性(智能指针和多线程等模块c++11以后才纳入标准库中)但是程序中一大堆指针,很难管理,于是我自己写了一套智能指针shared_ptr和unique_ptr,由于shared_ptr中需要引用计数,其中有一句话是:
if(ref_count<=0) { delete this; }
这句话的意思是就是如果引用计数为0就删除该ref_manager,我用引用计数管理器托管引用计数,ref_manager存在于heap上这样才能传递给其他ptr修改计数且内存中只存在一份。但是运行以后我发现会崩溃,我把以上那句代码注释,改成在外面shared_ptr中delete它就正常了(这也是合乎逻辑的,本来就应该是使用者来控制消亡)我也是故意想验证一下delete this是否可行,由此得出结论我在vs2008下编译出的代码delete this是有问题的。不知道高版本的vs中有没有,因为可能高版本的vs微软优化了编译器的前端就没这个问题了。
相关文章推荐
- Android Native 绘图方法
- Mootools 1.2教程 函数
- autoit InputBox 函数
- 文件遍历排序函数
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
- ASP下经常用的字符串等函数参考资料
- PostgreSQL教程(五):函数和操作符详解(1)
- C#中struct和class的区别详解
- DOS批处理 函数定义与用法
- asp Chr 函数 数字转字母的方法
- Lua中的函数精讲笔记
- Lua中的闭合函数、非全局函数与函数的尾调用详解
- Lua中调用C++函数示例
- Lua实现split函数
- Lua常用时间函数使用实例
- Lua函数与字符串处理简明总结
- Lua学习笔记之表和函数
- Lua中实现sleep函数功能的4种方法
- Lua函数用法研究
- Lua基础教程之赋值语句、表达式、流程控制、函数学习笔记