Qt deletelater函数分析(1)
生活的全部意义在于无穷地探索尚未知道的东西,在于不断地增加更多的知识。——左拉
该函数是QObject类的函数: -------------------------- (了解该类可以帮助深刻理解即Qt)

deletelater的原理是 QObject::deleteLater()并没有将对象立即销毁,而是向主消息循环发送了一个event,下一次主消息循环收到这个event之后才会销毁对象。
所有继承自QObejet类的类都会维护一个自己的子对象列表,同时会存储自己的父对象,所以界面中的各个控件(各个控价的基类都是QObject)可以实现层次!
“当我们使用父对象来创建一个对象的时候 ,父对象会把这个对象添加到自己的子对象列表中。当这个父对象被删除的时候,它会遍历它的子对象类表并且删除每一个子对象,然后子对象们自己再删除它们自己的子对象,这样递归调用直到所有对象都被删除。 这种父子对象机制会在很大程度上简化我们的内存管理工作,减少内存泄露的风险。所以,使用deleteLater主要作用还是减少内存泄露的风险。”
关闭一个窗口时(QQuickView, QQuickWindow,注意QQuickView的基类是QQuickWindow),建议用这个方法的deleteLater()
项目中的实例:
QQuickView* view = new QQuickView();
view->setSource(QUrl(QStringLiteral("qrc:/QML/xxx.qml")));
view->show();
关闭view时:
view->close(); //该函数会偶尔导致整个程序退出!看后面分析。可以不用它,直接掉deletelater()
view->deleteLater()
view = NULL;
调用deleteLater()后,xxx.qml中定义的对象会被销毁(析构函数被调用)。close函数仅仅是关闭页面,并不会将内存释放掉,如果不调用deleteLater函数会导致内存占用不断增加! 我在调试过程中,快速点击新建和关闭,并没有遇到deleteLater函数调用不及时的问题。
上面调用的close函数是QquickView的基类QWindow的函数,帮助文档中的解释:
“potentially quitting the application!!!!!!!!!!”---所以还是别用了

# 注意:
view->deleteLater()被调用之后需要将view这个指针置为NULL,否则就是野指针。
疑惑:如果按照上面的代码所写,会不会出现这种情况:当删除事件加入循环队列后,指针被赋值为0,接着删除事件被处理,这时因为指针为0,所以堆对象删除失败,造成了内存泄露?---- 不是!
deleteLater函数是QObject类的一个成员函数,它发出一个event给主循环,发出的事件中本身包含了需要被delete的对象的地址。
Ref:
https://www.cnblogs.com/liushui-sky/p/5852090.html https://blog.csdn.net/qq_30126571/article/details/78036576 https://blog.csdn.net/ZXHL_hxf/article/details/83410852 https://blog.csdn.net/li235456789/article/details/50599757 https://bbs.csdn.net/topics/392388844 https://blog.csdn.net/dbzhang800/article/details/6300025
Qt deletelater函数分析(1)的更多相关文章
- Qt deletelater函数分析(2)
夫唯不争,故天下莫能与之争 -- 老子 在C++中,delete 和 new 必须 配对使用,Qt作为C++的库,显然是不会违背C++原则.但是,qt有自己的内存管理,有时候虽然使用了new, ...
- Qt源码分析之QObject
原文:http://blog.csdn.net/oowgsoo/article/details/1529284 我感觉oowgsoo兄弟写的分析相当透彻,赞! 1.试验代码: #include < ...
- QT源码分析(从QApplication开始)
QT源码分析 转载自:http://no001.blog.51cto.com/1142339/282130 今天,在给同学讲东西的时候,谈到了Qt源代码的问题,才发现自己对Qt机制的了解是在太少了,而 ...
- 31.QPainter-rotate()函数分析-文字旋转不倾斜,图片旋转实现等待
在上章和上上上章: 28.QT-QPainter介绍 30.QT-渐变之QLinearGradient. QConicalGradient.QRadialGradient 学习了QPainter基础绘 ...
- split(),preg_split()与explode()函数分析与介
split(),preg_split()与explode()函数分析与介 发布时间:2013-06-01 18:32:45 来源:尔玉毕业设计 评论:0 点击:965 split()函数可以实 ...
- string函数分析
string函数分析string函数包含在string.c文件中,经常被C文件使用.1. strcpy函数原型: char* strcpy(char* str1,char* str2);函数功能: 把 ...
- start_amboot()函数分析
一.整体流程 start_amboot()函数是执行完start.S汇编文件后第一个C语言函数,完成的功能自然还是初始化的工作 . 1.全局变量指针r8设定,以及全局变量区清零 2.执行一些类初始化函 ...
- uboot的jumptable_init函数分析
一.函数说明 函数功能:安装系统函数指针 函数位置:common/exports.c 二.函数分析 void jumptable_init (void) { int i; gd->jt = (v ...
- Linux-0.11内核源代码分析系列:内存管理get_free_page()函数分析
Linux-0.11内存管理模块是源码中比較难以理解的部分,如今把笔者个人的理解发表 先发Linux-0.11内核内存管理get_free_page()函数分析 有时间再写其它函数或者文件的:) /* ...
随机推荐
- Apache Shiro<=1.2.4反序列化RCE漏洞
介绍:Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理. 漏洞原因:因为shiro对cookie里的rememberme字段进行了反序列化,所以如果知道了 ...
- lombok常用注解@Data@AllArgsConstructor@NoArgsConstructor@Builder@Accessors
原贴:https://blog.csdn.net/ChenXvYuan_001/article/details/84961992 https://blog.csdn.net/weixin_382293 ...
- Pivotal Greenplum 6.0 新特性介绍
Pivotal Greenplum 6.0 新特性介绍 在1月12日举办的Greenplum开源有道智数未来技术研讨会上,Pivotal中国研发中心Greenplum 产品经理李阳向大家介绍了Pi ...
- learning java FileReader
import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import ...
- 不用VS调试.Net
将来,任何开发人员都将需要调试应用程序,并且将无法访问Visual Studio,在某些情况下甚至无法访问源代码.例如,在生产web或应用服务器上调试问题时,我真的不想安装Visual Studio并 ...
- k8s 基础概念
摘录自k8s中文社区https://www.kubernetes.org.cn/course kubernetes 源自希腊文,意为舵手,k与s之间是8个字母,所以也叫k8s, docker就像一个个 ...
- Xshell6和Xftp6初步使用
Xshell6和Xftp6初步使用 一.Xshell6和Xftp6介绍: Xshell6:可以在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的. Xftp6:是 ...
- 1-ESP8266 SDK开发基础入门篇--开发环境搭建
因为今天终于做好了自己的另一块工控板,所以我就开始写基础公开篇的内容,希望自己小小的努力能够帮到大家 自己做的另一块板子 https://www.cnblogs.com/yangfengwu/cate ...
- 洛谷 P2085 最小函数值
目录 题目 思路 \(Code\) 题目 戳 思路 首先这些函数全部单带递增,因为\(a\),\(b\),\(c\)都是正整数. 我们将全部的函数的\(x\)为\(1\)时的函数值放入优先度列(小根堆 ...
- NuxtJS如何利用axios异步请求
第一种:使用nuxt 提供的 Axios插件 @nuxtjs/axios 1.安装:npm install @nuxtjs/axios -d 2.配置 nuxt.config.js exports d ...