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

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的函数,会对字符编码集进行处理。

运行结果:

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

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

这更加验证前面的话。

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

相关文章:

  • MySQL 的EXPLAIN 计划 type 字段详细说明
  • JavaWeb XML
  • 分布式存储学习——1.HBase的安装和配置
  • 三、0-1搭建springboot+vue3前后端分离-springboot整合mybatis plus 之本地安装mysql
  • 云原生时代的技术桥梁
  • DailyNotes 增加提醒功能
  • Vue 与 Nuxt 的区别
  • Ansys Zemax | 使用衍射光学器件模拟增强现实 (AR) 系统的出瞳扩展器 (EPE):第 4 部分
  • 如何用AI完成多源异构数据集成
  • Deepseek v1/v3 满血版登陆蓝耘,500 万 tokens 助力解锁 AI 无限可能
  • BeanDefinitionRegistryPostProcessor和BeanFactoryPostProcessor的区别
  • LeetCode 1328.破坏回文串:贪心
  • 自然语言模型(NLP)介绍
  • 利用Dify和Qwen2构建一个测试用例自动生成器Agent
  • 战略合作升级 | 大势智慧携手广西地测院,共绘智慧测绘新蓝图
  • Linux权限维持之修改文件/终端属性(一)
  • Redis的CPU高达90%时如何处理
  • todo: 使用融云imserve做登录(android)
  • 前端基础之全局事件总线
  • 第一节:基于Winform框架的串口助手小项目---基础控件使用《C#编程》
  • 快速开发平台 免费开源/泰安网站seo推广
  • 免费永久vps服务器/谷歌关键词优化怎么做
  • 展示型网页设计/搜索引擎优化指南
  • 江苏常州网站建设公司/网站关键词排名怎么提升
  • 废旧电脑做网站服务器/百度百度一下百度
  • 免费的网站建设开发/软文平台