<QT基础(1)>对象树结构

在Qt中,当你将一个对象设置为另一个对象的子对象时,Qt会自动管理它们的生命周期,包括子对象在堆上分配的内存空间。这意味着,如果你使用 new 在堆上创建了一个子对象,并将其设置为另一个对象的子对象,当父对象被销毁时,Qt会自动删除子对象并释放其内存空间,以避免内存泄漏。

QT中对象的基类是QObject,其构造函数为实例传入父指针,同时提供children()函数返回QObjectList获取所有子对象。这是QT的内存管理机制,创建一个QObject对象时,其会被添加到其父对象的子列表中,当父对象析构时,其子对象列表中的所有对象会被析构。此外,析构子对象会对应删除父对象子列表中的对应项。

这是为了应对在某个控件下new新的空间后没有及时delete的情况,在对象树结构下,父控件销毁时,子空间及布局管理器会被一并销毁。但是如果构造时的父对象为null,就需要对应的手动delete。

问题

C++中的析构按照构造相反的顺序,如果先创建子对象,再创建父对象,使用set方法把子对象加入父对象内,在这种情况下析构时,析构函数会先析构父对象子列表中的所有子对象,再析构父对象,再析构子对象。此时子对象已经被析构,所以会导致程序崩溃。

#include <QApplication>
#include <QPushButton>int main(int argc, char *argv[])
{QApplication a(argc, argv);QPushButton btn("button");QWidget widget;btn.setParent(&widget);widget.show();return a.exec();
}

结论

QT对象树机制无疑是内存管理的有效手段,但其使用需要规范:

  • 先创建父对象,再创建子对象,子对象创建时指示父对象;
  • 尽量在堆上创建子对象(避免父控件子列表悬空指针);参考:堆和栈上对象创建的区别
  • QObject不能使用static修饰(保证QObject对象在QApplication创建后创建、销毁前销毁)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/774888.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

海思 Hi3536AV100 简介

海思 Hi3536AV100 简介 Hi3536AV100 是针对多路高清/超高清&#xff08;1080p/4M/5M/4K&#xff09;智能NVR产品应用开发的新一代专业高端SoC芯片。集成了ARM Cortex-A55八核处理器和性能强大的神经网络处理器&#xff0c;支持多种智能算法应用。支持32路1080p多协议解码及4路…

OpenFoam最全总结

一、OpenFOAM用户指南-9(中文版)&#xff1a;这个里面用中文写了OpenFOam相关的基础知识和文件结构和基础语法&#xff0c;包括安装、使用、案例、paraview可视化等&#xff0c;是最全的的一个文档。 http://www.dyfluid.com/theory.pdf 二、无痛苦N-S方程笔记&#xff08;东岳…

深入浅出(五)QtPropertyBrowser库—属性编辑器

文章目录 1. QtPropertyBrowser简介1.1 下载 2. 编译和部署&#xff1a;3. C示例 1. QtPropertyBrowser简介 QtPropertyBrowser是一个第三方库&#xff0c;用于在Qt应用程序中显示和编辑属性。它不是Qt框架的一部分&#xff0c;但可以与Qt一起使用。 1.1 下载 GitHub地址&am…

URL是什么?(概念+应用场景+优缺点)

1、概念 URL&#xff08;Uniform Resource Locator&#xff09;是统一资源定位符的缩写&#xff0c;简称网址。 用于指定网络上的资源的位置和访问方式。 它包含了资源的协议、主机名、路径等信息&#xff0c;可以唯一标识互联网上的资源。 2、作用&#xff1a; ① 定位资…

HCIP-Datacom(H12-821)题库补充(3/27)

最新 HCIP-Datacom&#xff08;H12-821&#xff09;完整题库请扫描上方二维码访问&#xff0c;持续更新中。 运行OSPF协议的路由器&#xff0c;所有接口必须属于同一个区域。 A&#xff1a;正确 B&#xff1a;错误 答案&#xff1a;B 解析&#xff1a;OSPF的邻居关系是基于…

Python环境下滚动轴承状态监测与故障诊断(NASA IMS轴承数据集)

智能维护系统IMS)滚动轴承数据是美国辛辛那提大学智能维护系统中心提供的全寿命周期数据&#xff0c;轴上安装了4个轴承。通过摩擦带将转速保持恒定在 2000r/min。包含3个数据集&#xff0c;每个数据集描述了一个测试到失败的实验。其中第一个实验装置的数据采集从 2003 年 10月…

鸿蒙OS开发实例:【工具类封装-emitter组件间通信】

import Emitter from ohos.events.emitter; import pasteboard from ohos.pasteboard; MyEmitterUtil 是一个针对 HarmonyOS 的事件驱动编程封装类&#xff0c;主要用于组件间的通信和数据传递。 使用要求&#xff1a; DevEco Studio 3.1.1 Release 或更高版本API 版本&…

get 请求中传递数组参数

文章目录 问题分析 问题 使用get请求传参时有参数是数组 分析 qs.stringify({ a: [b, c] }, { arrayFormat: indices }) // 输出结果&#xff1a;a[0]b&a[1]c qs.stringify({ a: [b, c] }, { arrayFormat: brackets }) // 输出结果&#xff1a;a[]b&a[]c qs.stringif…

Qt C++ | QTimer经验总结

QTimer Class QTimer类提供重复计时器和单次计时器 头文件: #include <QTimer> qmake: QT += core 继承自: QObject 定时器信号 void timeout() 公共函数 Qt::TimerType 枚举定义了 Qt 中不同类型的定时器。它包含以下值: **Qt::PreciseTimer:**高精度定时器,用…

国内ip地址推荐,畅享网络新体验!

在数字化时代&#xff0c;IP地址不仅是网络连接的基石&#xff0c;也是互联网产业发展的重要标志。国内作为全球互联网市场的重要参与者&#xff0c;拥有众多IP地址资源。虎观代理小二旨在探索并推荐一些国内IP地址&#xff0c;分析它们的价值所在&#xff0c;并探讨如何更好地…

hcia datacom课程学习(4):ICMP与ping命令

1.什么是ICMP ICMP是ip协议的一部分&#xff0c;常用的ping命令就是基于icmp协议的。 在防火墙策略中也能看到ICMP&#xff0c;如果将其禁用&#xff0c;那么其他主机就ping不通该主机了 2. ICMP数据报 2.1数据报构成 ICMP协议的报文包含在IP数据报的数据部分&#xff0c; …

[windows]Windows上缩放窗体的两种方式

第一种 直接上图 第二种 第二种方式时&#xff0c;快速拖动时&#xff0c;如果是chrome浏览器套壳软件就会出现拖动部分出现黑边的现象而原生的桌面应用程序则不会出现黑边。这现象在chrome浏览器本身就存在。如图 typora是用electron写的软件存在该问题

FastAPI+React全栈开发07 MongoDB数据库的结构

Chapter02 Setting Up the Document Store with MongoDB 02 The structure of a MongoDB database FastAPIReact全栈开发07 MongoDB数据库的结构 MongoDB is arguably the most used NoSQL database today, its power, ease of use, and versatility make it an excellent c…

区块链与智能合约

什么是区块链 要想理解什么区块链&#xff0c;我们先来从本质上认识一下它 区块链&#xff1a;本质上是一个去中心化的分布式账本数据库&#xff0c;是指通过去中心化和去信任的方式集体维护一个可靠数据库的技术方法。 没有基础的人可能理解起来有点困难&#xff0c;我们来…

相位解包裹前识别有效区域和无效区域(条纹和背景区域区分)

对于不连续场进行相位解包的时候,首先要识别出图象中的哪些部分为有效数据,哪些部分为非有效数据"。这不仅关乎着相位解包算法的速度,更影响着解包算法的精度。因此在解包之前,对有效区域和无效区域的判断必须是首先要做的一件事情。下面就来介绍一下什么是有效区域和…

leetcode169-Majority Element

这道题目要求数组中最多的那个元素&#xff0c;这道题目的解法比较直观&#xff0c;直接遍历元素也可以有一个很好的时间复杂度。注意这里的遍历要求技巧&#xff0c;我们可以建立一个哨兵元素&#xff0c;并且记录哨兵元素出现的次数&#xff0c;如果遍历到的元素和哨兵元素一…

全国地质灾害点shp崩塌滑坡泥石流空间分布地质灾害详查等数据集

地质灾害是指在自然或者人为因素的作用下形成的&#xff0c;对人类生命财产造成的损失、对环境造成破坏的地质作用或地质现象。地质灾害在时间和空间上的分布变化规律&#xff0c;既受制于自然环境&#xff0c;又与人类活动有关&#xff0c;往往是人类与自然界相互作用的结果。…

【C++】每日一题 35 搜索插入位置

给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 #include <iostream> #include <vector>int searchIns…

LeetCode:1319. 连通网络的操作次数(并查集 Java)

目录 1319. 连通网络的操作次数 题目描述&#xff1a; 实现代码与解析&#xff1a; 并查集 原理思路&#xff1a; 1319. 连通网络的操作次数 题目描述&#xff1a; 用以太网线缆将 n 台计算机连接成一个网络&#xff0c;计算机的编号从 0 到 n-1。线缆用 connections 表示…

基于单片机的自动浇灌系统的设计

本文设计了一款由单片机控制的自动浇灌系统。本设计的硬件电路采用AT89C51单片机作为主控芯片,采用YL-69土壤湿度传感器检测植物的湿度。通过单片机将采集湿度值与设定值分析处理后,控制报警电路和水泵浇灌电路的开启,从而实现植物的自动浇灌。 1 设计目的 随着生活水平的…