当前位置: 首页 > article >正文

QT——对象树

在上一篇博客我们已经学会了QT的坏境安装以及打印一个hello world,但是如果有细心的朋友看了代码,就会发现有一个严重的问题,从C++语法看来存在内存泄漏。

上面的代码实际上并没有发送内存泄漏,是不是觉得有点奇怪?大家有没有发现上面的new代码里面传了参数,这是将this对象也就是parent与QLabel对象建立了父子关系,parent对象会将挂靠在parent里面利用类似于树形结构进行管理,里面有一个列表存储了挂靠在parent下的子对象,在parent对象释放的适合会将子对象也释放掉,为什么我们不手动释放呢?有两个原因

1,防止粗心大意导致内存泄漏(作用类似于C++智能指针)

2,代码一下就运行结束了,我们的窗口布局如果自己释放内容也一下子就结束了,利用对象树就可以在窗口关闭的合适时机释放,看接下来的代码和运行图。

注:挂到对象树上面就不要手动释放哦,可能导致资源重复释放和破坏对象树。

注意:挂的是空指针,不然可能重复释放资源和破坏对象树哦。

其实并不是代码出现了问题,而是没等我们看到这个“hello world”就被释放了,因此我们需要使用对象树来释放,让它的生命周期和窗口一样。

我们可以通过对QLable封装一下看到这个现状,下面是封装代码

注:为什么要用QDebug,因为使用C++的cout编码会和qt的编码冲突,打印乱码,而QDebug是qt的函数,会对字符编码集进行处理。

运行结果:

我们可以看到析构函数没有打印,代表还没有执行,那我们叉掉窗口试试

这就代表子对象析构是和父对象一起析构的,而且是窗口关闭后析构的,如果我们自己手动释放会怎么样呢?

这更加验证前面的话。

欧克,今天就到这里,如果有所收获的话记得点赞收藏哦。


http://www.kler.cn/a/579513.html

相关文章:

  • 数据分析和可视化课程实验报告一(数据分析基础)
  • 如何通過安裝輕量性圖形界面減少Linux服務器壓力
  • c#面试题整理7
  • 利用pdf.js+百度翻译实现PDF翻译,创建中文PDF
  • SpringBoot 自定义异常处理
  • SparkAi系统体验
  • 【最后203篇系列】011 Mongo异步代理开发回顾
  • golang 从零单排 (一) 安装环境
  • 京东POP商家小程序电商布局策略与优化路径研究
  • 《Python实战进阶》No17: 数据库连接与 ORM(SQLAlchemy 实战)
  • 从零开始的 Kafka 学习(二)| 集群启动
  • vue+element|el-tree树设置懒加载和设置默认勾选
  • Go_zero学习笔记
  • 关于更新字段为空值——MybatisPlus框架
  • Linux | Vim 鼠标不能右键粘贴、跨系统复制粘贴
  • 为企业级AI交互系统OpenWebUI集成LDAP用户权限认证(1)
  • Python爬虫实战:爬取财金网实时财经信息
  • 如何高效准备PostgreSQL认证考试?
  • 基于LabVIEW的脚本化子VI动态生成
  • 如何构建一个 Docker 镜像?