Qt 销毁机制个人理解~
来源:互联网 发布:淘宝旧版本ipad 编辑:程序博客网 时间:2024/06/05 04:15
首先了解这些对windows编程有更深入的理解,其实就是从Qt在windwos上就是win32的扩展了一下,一般程序退出后,即使不delete你分配的内存,操作系统也会帮着回收,Qt有着半自动的回收机制,为什么是半自动呢?个人理解如下,Qt中的一切事件,图形等都是经过QObject派生出来的,每一个QObject中都有一个线性表,为什么我会这么理解呢?在写程序的时候我们使用过findChild或者findChildren等 Template..我就好奇了为什么能找得出来,出于探求真理的目的,翻看了QObject。findChild源码如下:
template<typename T> //一个简单的模板函数,inline T findChild(const QString &aName = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively) const{ typedef typename QtPrivate::remove_cv<typename QtPrivate::remove_pointer<T>::type>::type ObjType; return static_cast<T>(qt_qFindChild_helper(this, aName, ObjType::staticMetaObject, options));//!无奈Qt机智的用qt_qFindChild_helper()来包装了一下。。无奈这个函数无源码//!但博主胡乱猜测一下,里面应该是对线性表的objectname遍历判断~}
经过测试要使用他们的话必先要指定parent();由此我就可以分析出,其实每指定一个parent,就会帮你添加一个结点,从整个程序来看,这样就形成了一颗树树树!!于是我又想到,Qt为什么推荐使用delete later,因为它可以帮你删除线性表上的子孙啊~delete反而可能造成内存泄漏,但从测试程序看出,delele并没有造成内在泄漏且孩子也都完整的销毁了。区别就是delete不会发送DeferredDelete消息,而deletelater要发。
一,在主窗口删除的退出程序的时候,略有不同,大体是这样一个流程:
1) 先给主窗口发送一个close 事件;
2) 再发送WindowDeactivate(释放窗口)
3) 如果都显示的话,儿子些全部都给我hide,hide的时候顺序还有点怪,先从爹再从最小的儿子
4) 最后再调用各自的析构就~顺序有点不太能理解就是从都爹开始,孩子层级析构
二,普通的一个Object删除大体是这样的流程:
1) 对删除的目标发送一个DeferredDelete事件,看文档说的是目标将被清除,当它整理好了后
2) 如果都显示的话,儿子些全部都给我hide,和上面那种一样
3) 再发一个childRemoved事件到它的爹那里去。
4) 调用各自的析构~
更多文章:http://blog.csdn.net/what951006?viewmode=list
powered by:小乌龟在大乌龟背上
- Qt 销毁机制个人理解~
- QT坐标个人理解
- 分段机制(个人理解)
- 分页机制(个人理解)
- 保护机制(个人理解)
- android事件机制个人理解
- JVM加载机制--个人理解
- android Handler机制(个人理解)
- 消息列队机制(个人理解)
- Linux内核-中断机制个人理解
- 个人对于JAVA反射机制的理解
- java的反射机制(个人理解)
- Qt销毁非模态对话框
- Qt的信号与槽机制理解
- Java反射机制的个人理解与总结
- 个人对Android Touch事件机制的理解
- 安卓事件传递机制个人理解版
- 对于JAVA反射机制和CLASS类的个人理解
- Maven下载及配置
- Spark系列修炼---入门笔记27
- PhoneApp 启动异常分析及解决办法
- 算法-第四版-练习1.3.33解答
- 欢迎使用CSDN-markdown编辑器
- Qt 销毁机制个人理解~
- n后问题
- HDU 1698 Just a Hook(线段树区间替换)
- EXCEL篇一:快速录入数据
- Linux文件类型
- Java高并发程序设计笔记10之NIO和AIO
- 友好城市
- linux upgrate 和upgrade
- char ** 和 const char ** 区别