在类中delete自己会不会有问题??
来源:互联网 发布:开淘宝店能挣钱吗 编辑:程序博客网 时间:2024/04/28 22:32
这个问题很多人都在问,很多人有不同答案,有一点是可以肯定,就是千万别在析构函数中调用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微软优化了编译器的前端就没这个问题了。
0 0
- 在类中delete自己会不会有问题??
- A.c和B.c两个文件中使用了名字相同的static变量,编译的时候会不会有问题?这两个static变量存储在什么地方?
- try中有return,finally中的code会不会执行,执行是在return前还是后?
- (java)try{}中有一个return语句,那么紧跟在其后的finally会不会执行?什么时候执行?
- 问题:在编程中为了防止内存泄漏是不是只要malloc或者new都有对应的free和delete就不会有内存泄漏
- 关于对象在函数中delete的一个问题
- C++中delete问题
- C++中delete问题
- 在报关的过程中会不会出现两个商检
- 在自己构造的DLL动态链接库中调用winmm.lib的mciSendString函数有问题
- java中finally语句快会不会执行的问题
- java中TreeSet类add时去重问题(与自己定义的Comparator有直接关系)
- oracle delete操作会不会改变HWM-实验
- 关于java多线程中同步的问题(两个线程访问同一个实例类的两个同步方法,会不会互相影响)
- C++中为什么有delete[]这种写法?
- Qt中delete的问题
- Qt中delete的问题
- DLL导出类,在EXE中调用delete时非法操作
- 安卓第三夜 概念漫游(上)
- OSI七层模型
- 输入名字或者地址可以下载论文
- POJ 3734 (快速幂)
- 119. Pascal's Triangle II
- 在类中delete自己会不会有问题??
- 位运算符
- 安卓第四夜 概念漫游(下)
- Ubuntu 14.04 安装MongoDB 3.2社区版
- IOS测试:XCTest小试牛刀
- Java IO:基于字节的IO操作
- 安卓第五夜 维纳斯的诞生
- 数据库连接与子查询习题
- iOS 得到圆形头像的方法