免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: llj
打印 上一主题 下一主题

delete对象的内存泄露问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2011-11-05 16:19 |只看该作者

论坛徽章:
0
12 [报告]
发表于 2011-11-05 16:25 |只看该作者
先把那三个成员 delete试试

论坛徽章:
0
13 [报告]
发表于 2011-11-05 18:14 |只看该作者
下个礼拜一尝试一下; 有新的线索再上来汇报。

多谢楼上的。

论坛徽章:
0
14 [报告]
发表于 2011-11-05 20:32 |只看该作者
我用的方法比较特别,对象是new出来, 但是释放的时候是对象释放自己,delete this。

从日志看, 很正 ...
llj 发表于 2011-11-05 15:21

delete this?重载了operator delete么?还是想递归析构函数?

论坛徽章:
0
15 [报告]
发表于 2011-11-05 20:47 |只看该作者
delete this?重载了operator delete么?还是想递归析构函数?
幻の上帝 发表于 2011-11-05 20:32


没有重载operator delete方法。    主要是用于递归析构

论坛徽章:
0
16 [报告]
发表于 2011-11-05 22:08 |只看该作者
回复 15# llj

释放自身是指在析构函数里直接delete this了吗?还是说另外的成员函数被调用然后delete this?
delete this一般比较少用,因为比较麻烦:首先必须确保对象是new出来的,然后一旦delete this之后对对象的数据成员不能有任何操作。否则就有未定义行为。
至于递归……对象销毁时析构函数的隐式调用本身就是递归的,如果不是需要对递归出口做一些限制,也不用delete this。
这里的递归出口呢,引用计数到0还是别的?

论坛徽章:
0
17 [报告]
发表于 2011-11-05 22:33 |只看该作者
回复  llj

释放自身是指在析构函数里直接delete this了吗?还是说另外的成员函数被调用然后delete this ...
幻の上帝 发表于 2011-11-05 22:08



     你说的很对, 有引用计数的。

    delete this 是在另个成员函数里调用, 当引用计数零时, 才会销毁对象。

论坛徽章:
0
18 [报告]
发表于 2011-11-05 22:44 |只看该作者
delete this虽说也很容易驾驭,但我比较胆小,不是临机应变的场合绝对不用。

论坛徽章:
0
19 [报告]
发表于 2011-11-06 02:28 |只看该作者
你说的很对, 有引用计数的。

    delete this 是在另个成员函数里调用, 当引用计数零时,  ...
llj 发表于 2011-11-05 06:33



    有两个问题想先确认一下:

你说的成员对象,就是对象,不是指针指向额外拥有的堆空间?

你用成员函数引用计数来delete this,这个倒是有见过,如果不是多线程的话一般没啥问题。那你外面对象的创建也应该是用成员函数,而不是用构造函数?

论坛徽章:
0
20 [报告]
发表于 2011-11-06 10:10 |只看该作者
你说的很对, 有引用计数的。

    delete this 是在另个成员函数里调用, 当引用计数零时,  ...
llj 发表于 2011-11-05 22:33


如19L所说,如果没多线程的问题,保证对象是new出来的,正常情况下这样用是可行的。析构函数写对(正确delete指针成员;这个应该不成问题)的话出现这种情况很可能是前面的操作有问题,已经引起了未定义行为。你可能需要检查一下引用计数之类的地方,比如说是不是会有什么操作导致一个对象被delete超过一次?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP