关键词:Qt对象的父子关系、Qt对象树
问题:QCalculator
类对象在堆空间中创建了文本框和按钮,但没有对应的delete
代码,内存存在泄漏吗?
1. Qt对象间的父子关系
每一个对象都保存有它所有子对象的指针——父对象中有一个children List
来保存其子对象的指针
每一个对象中都有一个指向其父对象的指针——父对象的指向的其父对象指针为空指针
当指定Qt对象的父对象时:
1) 其父对象会在子对象链表中加入该对象的指针
2) 该对象会保存指向其对象的指针
QObject* parent = new QObject();
QObject* child = new QObject();
child -> setParent(parent);
当Qt对象被销毁时:
1)将自己从父对象的Children List
移除
2)将自己的children List
中的所有对象销毁
使用Qt开发时,不仅要时刻注意内存泄漏的问题,还要时刻关注对象是否可能被多次销毁的问题。
2. Qt对象树
利用Qt对象间的父子关系可以构成对象树
删除树中的结点时会导致对应的子树被销毁
3. 小结
- Qt对象间可以存在父子关系
- 通过父子关系能够得到Qt对象树
- Qt对象销毁时解除和父对象间的父子关系
- Qt对象销毁时将同时销毁所有的子对象
声明:此文章仅是本人在学习狄泰QT实验分析课程所做的笔记,文章中包含狄泰软件资料内容,一切版权归狄泰软件所有!
实验环境:ubuntu10 + Qt Creator2.4.1 + Qt SDK 4.7.4