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

【内存管理】对象树(内存管理)

一、前言

我们常常听到 QObject 会用对象树来组织管理自己,那什么是对象树?这个概念非常好理解。因为 QObject 类就有一个私有变量 QList<QObject *>,专门存储这个类的子孙后代们。比如创建一个 QObject 并指定父对象时,就会把自己加入到父对象的 children() 列表中,也就是 QList<QObject *> 变量中。

在QT中使用对象树来管理 QObject 及其子类的对象。当父对象析构的时候,QList<QObject *>这个列表中的所有对象也会被自动逐级析构。
在这里插入图片描述


二、演示实例

2.1、[getTest()有paren] VS [getTest2()无parent]

include <QCoreApplication>
#include <QTimer>
#include "test.h"Test* getTest(QObject* parent){return new Test(parent);
}
Test* getTest2(){return new Test(); //No parent
}int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QTimer timer;timer.singleShot(3000,&a,&QCoreApplication::quit);Test* dog = getTest(&a);    // 有父亲dog->setObjectName("BaGong");Test* cat = getTest2();     // 无父亲cat->setObjectName("Kitty");cat->setParent(dog);int value = a.exec();qInfo() << "Exit code:" << value;return value;
}//test.cpp
#include "test.h"Test::Test(QObject *parent) : QObject(parent){qInfo() << this << "Constructed" << parent;
}
Test::~Test(){qInfo() << this << "Deconstructed" << parent();
}

在这里插入图片描述

可以看出,子类最后被析构回收。
在这里插入图片描述
可以看到有构造函数,但却无析构函数执行。


http://www.xdnf.cn/news/3360.html

相关文章:

  • (持续更新)Ubuntu搭建LNMP(Linux + Nginx + MySQL + PHP)环境
  • DeepSeek生成Word文档的创新路径与应用
  • 【计算机视觉】三维视觉:Nerfstudio:模块化神经辐射场框架的技术突破与实战指南
  • 操作系统OS是如何指挥外围设备的呢?
  • MySQL 服务搭建
  • Leetcode刷题记录25——合并区间
  • MySQL与分布式架构的碰撞
  • 使用MGeo模型高精度实现文本中地址识别
  • 题解:洛谷 CF2091E Interesting Ratio
  • Java 中使用正则表达式
  • 在Linux中,KVM和Docker在Linux虚拟化中的区别是什么?
  • 【计算机视觉】语义分割:Mask2Former:统一分割框架的技术突破与实战指南
  • Mysql常用函数解析
  • Annotate better with CVAT
  • 华为OD机试真题——斗地主之顺子(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
  • 《TCP/IP详解 卷1:协议》之第九章:IP选路
  • 湖仓一体化介绍
  • 数据库基本概念:数据库的定义、特点、分类、组成、作用
  • 详解TypeScript中的类型断言及其绕过类型检查机制
  • 【Vue bug】:deep()失效
  • 如何提升自我执行力?
  • 拆解 browser-use 项目——深入理解 Agent 层
  • Linux 环境下 Mysql 5.7 数据定期备份
  • Kotlin-运算符重载函数
  • 生产级RAG系统一些经验总结
  • HTN77A0原理图提供聚能芯半导体禾润一级代理技术支持免费送样
  • 1295.统计位数为偶数的数字
  • SWIG 和 JNA / JNI 等 C 接口封装工具及进行 C 接口的封装
  • AnimateCC基础教学:二次贝塞尔曲线的绘制。
  • Android 动态权限申请