Qt 父子机制

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

Qlist <QImage> imageList;

imageList.append(new QImage());

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

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

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

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

 

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

你可能感兴趣的:(Qt 父子机制)