看到几位网友在说这个问题
看了些这方面的文章,不敢说有很深的了解
只为和大家交流心得
和大家讨论下Qt内存回收机制
如果不对还请大家指正
Qt本身所含的400多个类都使由QObject继承而来
QObject在建立的时候就加入了内存回收机制
这个内存回收机制并不是能像程序员所期待的那样想让空闲的空间消失就消失的
大家都知道QObject类的构造函数里有个*parent指针
这个指针从字面意义上理解就是父指针
当parent的空间被指定释放时
QObject先检查在本对象中是否还有
其他指针指向的空间未被释放(当然这个对象必须指定parent为当前的类)
如果发现还由未被释放的,就释放该指针的空间
例如
class Son;
class Parent
{
Parent(QObject *parent=0);
private:
Son *ps;
};
Parent::Parent(QObject *parent)
: QObject(parent)
{
ps = new Son(this);
}
如上
在此我假设class Son由QObject派生而来
如果在上面的构造函数中没有this参数
也就是说ps没有parent那么当Parent的对象析构(或空间释放)时
ps的空间就不会被释放出来这样就产生了内存泄漏
而当ps有parent并为this时
当Parent的对象析构(或空间释放)完之前
首先Parent检查ps是否为Null
否则释放其空间
直到所有Parent内的对象释放完再自身发生析构(或者空间释放)
因此大家在做开发时要记得对parent赋值
当然Qt这套内存回收机制并不是很完美
但是对于GUI控件设计来说
我们程序员可以不用写析构函数
但如果在一些其他地方需要不设置parent的时候必须由程序员自己写析构函数了
本人拙见
如果不完整或不正确欢迎指正
[ 此贴被roc496在2009-02-01 11:51重新编辑 ]