Qt 父子机制

在对qt的使用过程中一直有个疑问,比如下面这段代码:

Qlist <QImage> imageList;

imageList.append(new QImage());

我们并没有用一个指针指向new QImage(),在程序运行结束时我们也没有使用delete删除这块内存,那是不是这就造成内存泄露了呢。

其实Qt内部已经实现了一个机制来解决这个问题,这就是父子机制。一下这段内容摘自 《c++ GUI Qt4》这本书。

“Qt的父子对象机制是在 Qobject 中实现的。当利用一个父对象创建一个子对象(一个窗口部件,一个检验器,或者是任意其他的类型)的时候,父对象会自动把这个子对象添加到自己的子对象列表中。当删除这个父对象的时候,它会遍历子对象列表并且删除每一个子对象。然后,这些子对象再去删除她们自己所包含的的每个子对象。如此反复递归调用,直至清空所有子对象为止。这种父子对象机制可在很大程度上简化内存管理工作,降低内存泄露的风险。需要明确删除的是那些使用 new 创建却没用父对象的对象。并且,如果在删除一个父对象之前先删除了它的子对象,Qt会自动的从它的父对象列表中将其移除。

对于窗口部件,父对象还有另外一层含义:子窗口部件会显示在它父对象所在的区域中。当删除这个父对象窗口部件时,不仅子对象会从内存中消失,而且他也会在屏幕上消失。”

 

《c++ GUI Qt4》 这本书买了很久,却没有认真的通读一遍,真是有点惭愧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值