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

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

一、前言

我们常常听到 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();
}

在这里插入图片描述

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


相关文章:

  • 轻文轻小说网站备份,轻文轻小说网站备份的方法
  • 基于Koa实现的服务端渲染 ✅
  • Linux——虚拟地址空间
  • Cribl 数据脱敏 更多方法 MASK (三)
  • C++使用accumulate函数对数组进行快速求和
  • DBeaver虚拟主键会影响实际的数据库吗
  • 《AI大模型应知应会100篇》第41篇:多轮对话设计:构建高效的交互式应用
  • VM虚拟机安装CentOS7.9
  • spring-cloud-alibaba最新版本聚合项目创建
  • 理解计算机系统_网络编程(6)_web服务器
  • 完美中国制度流程体系建设(70页PPT)(文末有下载方式)
  • 拉宾公钥密码算法实现
  • Dubbo(88)如何设计一个跨地域的Dubbo服务?
  • Leetcode刷题记录24——最大子数组和
  • 在 Modal 平台上高效部署 DeepSeek 模型:从环境准备到实战案例
  • 小白dockerfile
  • 数字智慧方案5972丨智慧农业大数据平台解决方案(65页PPT)(文末有下载方式)
  • 协议(消息)配置
  • ctfshow web入门 web44
  • 如何用AI生成生成个人简历
  • 本周看啥|《乘风》迎来师姐们,《天赐》王蓉搭Ella
  • 乌方公布矿产协议详情:未提债务义务,包含美再援助条款
  • 人民日报评论员:因势利导对经济布局进行调整优化
  • 空调+零食助顶级赛马备战,上海环球马术冠军赛将焕新登场
  • 全文丨中华人民共和国民营经济促进法
  • 过去24小时中美是否就关税问题进行过接触?外交部:没有