当前位置: 首页 > 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();
}

在这里插入图片描述

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


http://www.dtcms.com/a/167512.html

相关文章:

  • 轻文轻小说网站备份,轻文轻小说网站备份的方法
  • 基于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生成生成个人简历
  • 2025深圳杯、东三省数学建模B题数模AI全网专业性第一
  • MATLAB R2024a安装教程
  • Python 常用内置函数详解(九):type()函数——获取对象类型或获取一个新的类型对象
  • 【Tool】vscode
  • Unity图片导入设置
  • d202551
  • [蓝桥杯 2023 国 Python B] 划分 Java
  • 【Unity】MVP框架的使用例子
  • Http详解
  • AI日报 · 2025年05月01日|DeepSeek 发布新一代定理证明模型 Prover V2