首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

paip.c++ 内存泄漏以及解决之道

2013-10-13 
paip.c++ 内存泄漏以及解决之道.paip.c 内存泄漏以及解决之道.作者Attilax ,EMAIL:1466519819@qq.com 来源

paip.c++ 内存泄漏以及解决之道.
paip.c++ 内存泄漏以及解决之道.




作者Attilax ,  EMAIL:1466519819@qq.com 
来源:attilax的专栏
地址:http://blog.csdn.net/attilax


////////内存泄漏手动检测,最好使用工具来做.
参考Qt内存泄漏问题 - envenler的专栏 - 博客频道 - CSDN.NET.htm


//////////////自己调用delete来删除通过new分配到heap中的 label 对象
在C++中学习过程中,我们都知道:
· delete 和 new 必须配对使用(一 一对应):delete少了,则内存泄露,多了麻烦更大。


/////////////使用Qt 智能指针
/////////////使用boost 智能指针,,STL智能指针


//////////use QT new控件,但不delete,为什么没有内存泄露
----new控件 指定parent 父子关系 
父子关系deleteLater父子关系 在Qt中,每个 QObject 内部都有一个list,用来保存所有的 children,还有一个指针,保存自己的parent。当它自己析构时,它会将自己从parent的列表中删除,并且析构掉所有的children。
当我们使用父对象来创建一个对象的时候 ,父对象会把这个对象添加到自己的子对象列表中。当这个父对象被删除的时候,它会遍历它的子对象类表并且删除每一个子对象,然后子对象们自己再删除它们自己的子对象,这样递归调用直到所有对象都被删除。 这种父子对象机制会在很大程度上简化我们的内存管理工作,减少内存泄露的风险。我们需要显试删除(就是用DELETE删除)的对象是那些使用NEW创建的并且没有父对象的对象(切记是new的才要delete,通过成员函数获得的对象,没有特殊说明的,千万不要随便delete.)


Qt 自动回收不像Java这种,有垃圾回收机制。 Qt 自动回收是靠父子关系。父亲销毁了。他的孩子也销毁。 所以为什么 mai
Qt中帮程序员做了一些内存回收的事情,但正因为这些反而让对此不熟悉的人会屡屡犯错






:在Qt中,我们很多时候都疯狂地用new,却很少用delete,缺少的 delete 去哪儿了?! 注:本文暂不涉及智能指针(smart pointer)相关的东西,你可以考虑 Qt 智能指针学习 一文Qt半自动的内存管理在Qt中,以下情况下你new出的对象你可以不用亲自去delete (但你应该清楚delete在何处被Qt调用的,怎么被调用的


/////////////分配对象到stack而不是heap中
QLabel label("Hello Qt!"); label.show();


////////////设置标志位,这样,当我们点击关闭按钮时,close()函数将会调用deleteLater
label->setAttribute(Qt::WA_DeleteOnClose);


参考:
QT内存泄露问题_cgzhello_新浪博客.htm
Qt 智能指针学习 - 1+1=2 - 博客频道 - CSDN.NET.htm

热点排行