Qt --- 对象树机制、析构顺序导致崩溃

{QWidget widget;QPushButton buttonQuit("Quit",&widget);
}

 作为父组件的widget,子组件buttonQuit都是QObject的子类;上述代码运行没有问题。

代码析构时,因为C++的要求,局部对象的析构时按照实例化顺序逆向的顺序析构。当这段代码执行完成,会先析构buttonQuit,然后将其从父对象widget的子对象列表中删除。然后析构widget对象。

如果我们将代码携程下列样式:

{QPushButton pushbuttonQuit("Quit");QWidget widget;pushbuttonQuit.setParent(&widget);
}

这段代码将会出现崩溃:问题是pushbuttonQuit会被析构两次而崩溃;

当代码执行完成后,按照C++的析构顺序为对象生成顺序的逆序来析构,因为pushbuttonQuit在widget对象前生成,所以先析构widget对象,发现子列表中有子对象pushbuttonQuit,则也会将其析构;析构完widget对象后再去析构pushbuttonQuit,就会二次析构而崩溃。

在Qt中,析构父对象而默认也会将父对象的子对象列表一并析构,这种机制是Qt的对象树引入的,可以帮我们开发时解决一定的内存管理问题,但是也会引入这种类似的问题。

所以,开发时就要有良好的习惯,在构造时候就指定父对象,并且可以大胆在堆上创建。

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

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

相关文章

「MySQL-01」MySQL基础

目录 一、数据库概念 1. 什么是数据库 2. 为什么要有数据库? 3. 数据库将数据存在哪里? 二、知名数据库介绍 1.知名数据库介绍 2.为什么要学习MySQL 三、MySQL的基本使用 0. 安装MySQL 1. 数据库客户端链接服务端 2. Windows下的MySQL服务端管理 3. 数据…

昌硕科技、世硕电子同步上线法大大电子合同

近日,世界500强企业和硕联合旗下上海昌硕科技有限公司(以下简称“昌硕科技”)、世硕电子(昆山)有限公司(以下简称“世硕电子”)的电子签项目正式上线。上线仪式在上海浦东和硕集团科研大楼举行&…

flowable源码解析之分析环境搭建

系列文章目录 第一章 源码分析环境搭建 第二章 流程引擎启动(一) 第三章 流程引擎启动(二) 第四章 流程引擎启动(三) 第五章 流程引擎启动(四) 第六章 流程部署 第七章 流程模型解析 第八章 流程的发起 第九章 数据存储机制 文章目录 系列文章目录一、Flowable源码分析…

使用fastjson2的@JSONField注解解决日期格式记录

最近在做一个三方对接&#xff0c;对方的日期格式数据要求时间日期格式: yyyyMMddHHmmss或者 yyyyMMdd&#xff0c;我一下想起了fastjson2工具包&#xff0c;所以很愉快的解决了此问题。 依赖jar如下&#xff1a; <dependency><groupId>com.alibaba.fastjson2</…

mysql 触发器格式,修改触发器,创建触发器,触发条件

1.查询所有触发器 show triggers; 2.创建触发器 #修改结束符 delimiter $$create trigger <自定义出发名> after insert on <所监听的表名> for each row begin#执行多条sql语句#拿到监听数据 关键字 new/old 即 新数据/旧数据update classify set cat_num cat…

每日一博 - 闲聊云原生和容器编排

文章目录 概念1. 云原生&#xff08;Cloud Native&#xff09;&#xff1a;2. 容器编排&#xff08;Container Orchestration&#xff09;&#xff1a; 小结 概念 云原生和容器编排是两个不同的概念&#xff0c;但它们之间有着密切的联系。下面将分别介绍这两个概念&#xff0…

day-02 套接字类型与协议设置、地址族和数据序列

一.套接字类型 1.面向连接的套接字&#xff08;SOCK_STREAM&#xff09; 特点&#xff1a; 传输过程中数据不会消失按顺序传输数据传输的数据不存在数据边界 2.面向消息的套接字&#xff08;SOC_DGRAM&#xff09; 特点&#xff1a; 强调快速传输而非传输顺序传输的数据可…

【C++】const成员 | 取地址运算符重载

Ⅰ. const成员 两种const 我们知道&#xff0c;用const修饰 能起到保护&#xff0c;使之不被修改的作用。 修饰指针的const有两种位置&#xff1a; 我们学过的this指针&#xff0c;就被后者所修饰&#xff0c;因此无法被修改。 const成员函数 ➡️为了保护函数里的成员&…

《Java极简设计模式》第05章:原型模式(Prototype)

作者&#xff1a;冰河 星球&#xff1a;http://m6z.cn/6aeFbs 博客&#xff1a;https://binghe.gitcode.host 文章汇总&#xff1a;https://binghe.gitcode.host/md/all/all.html 源码地址&#xff1a;https://github.com/binghe001/java-simple-design-patterns/tree/master/j…

【日常积累】Linux下sftp搭建

概述 SFTP是Secure File Transfer Protocol的缩写&#xff0c;是安全文件传送协议。可以为传输文件提供一种安全的加密方法。跟ftp几乎语法功能一样。 SFTP是SSH的一部分&#xff0c;是一种传输档案至Blogger伺服器的安全方式。它本身没有单独的守护进程&#xff0c;必须使用s…

Elasticsearch 8.X reindex 源码剖析及提速指南

1、reindex 源码在线地址 为方便大家验证&#xff0c;这里给出 reindex github 源码地址。 https://github.com/elastic/elasticsearch/blob/001fcfb931454d760dbccff9f4d1b8d113f8708c/server/src/main/java/org/elasticsearch/index/reindex/ReindexRequest.java reindex 常见…

开源软件的崛起:历史与未来

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

Lambda函数

一.概念 1.利用lambda表达式可以编写内嵌的匿名函数&#xff0c;用以替换独立函数或者函数对象 2.每当你定义一个lambda表达式后&#xff0c;编译器会自动生成一个匿名类&#xff08;这个类当前重载了&#xff08;&#xff09;运算符&#xff09;&#xff0c;我们称为闭包类型…

8.6 【C语言】返回指针值的函数

一个函数可以返回一个整型值、字符值、实型值等&#xff0c;也可以返回指针型的数据&#xff0c;即地址。 类型名 *类型名&#xff08;参数表列&#xff09; 例8.25 有a个学生&#xff0c;每个学生有b门课程的成绩。要求在用户输入学生序号以后&#xff0c;能输出该学生的全部…

Lazada商品详情接口 获取Lazada商品详情数据 Lazada商品价格接

一、引言 随着电子商务的迅速发展和普及&#xff0c;电商平台之间的竞争也日趋激烈。为了提供更好的用户体验和更高效的后端管理&#xff0c;Lazada作为东南亚最大的电商平台之一&#xff0c;开发了一种商品详情接口&#xff08;Product Detail API&#xff09;。该接口允许第…

数据可视化是什么?有什么工具?

一、什么是数据可视化&#xff1f; 数据可视化是一种通过图表、图形、地图和其他视觉元素将数据呈现给用户的方式。它是将复杂的数据转化为易于理解和解释的视觉形式的过程。数据可视化旨在帮助用户发现数据中的模式、趋势和关联&#xff0c;并从中获得洞察力。 数据可视化的…

根据源码,模拟实现 RabbitMQ - 转发规则实现(6)

目录 一、转发规则实现 1.1、需求分析 1.2、实现 Router 转发规则 1.2.1、bindingKey 和 routingKey 参数校验 1.2.2、消息匹配规则 1.2.3、主题交换机匹配规则 一、转发规则实现 1.1、需求分析 这里主要实现 routingKey 和 bindingKey 参数的校验&#xff0c;以及 Topic…

Python(.pyc)反编译:pycdc工具安装与使用

本文将介绍如何将python的.pyc文件反编译成源码&#xff0c;以便我们对源码的学习与改进。pycdc工具安装 下载地址&#xff1a; 1、Github地址&#xff1a;https://github.com/zrax/pycdc &#xff0c;下载后需要使用CMake进行编译。 2、已下载好及编译好的地址&#xff1a;ht…

ISIS路由协议

骨干区域与非骨干区域 凡是由级别2组建起来的邻居形成骨干区域&#xff1b;级别1就在非骨干区域&#xff0c;骨干区域有且只有一个&#xff0c;并且需要连续&#xff0c;ISIS在IP环境下目前不支持虚链路。 路由器级别 L1路由器只能建立L1的邻居&#xff1b;L2路由器只能建立L…

1.2 Kali Linux的网络配置

前言 最新文章请见此处&#xff0c;持续更新&#xff0c;敬请订阅&#xff01;https://blog.csdn.net/algorithmyyds/category_12418682.html 网络在如今的社会已是十分重要的媒介&#xff0c;如果没有网络&#xff0c;很多事情将难以办成。渗透测试也是一样——毕竟在攻击机…