QT c++ 堆栈一些理解--限制对象建立在栈上--栈堆区别

news2024/12/28 17:42:36

图示形象化理解:

 堆栈都是数据结构存取数据的方式

堆:理解为一个堆积物体,独立的分散的,当需要空间时,再找一个地方。需要的就是new关键字,动态申请一个空间。程序员自己动态分配空间,使用指针操作,不使用时,手动在析构函数里删除指针

动态创建对象

栈:可以理解火车站的站,是通过调度是统一安排停放在哪个位置,占用存储空间,无需自己考虑。程序员无需考虑空间分配问题,无需在析构函数中处理。

静态创建对象

栈的容量较小,一般只有几百KB到几MB的空间

---------------------------------------------------------------------------------------------

  1. 内存分配方式:

    • 栈:由操作系统或编译器自动分配和释放,通常用于存储局部变量、函数参数和控制信息。栈的内存分配是按照“后进先出”的原则进行的,即最后一个进入栈的变量最先被释放。栈的容量较小,一般只有几百KB到几MB的空间。
    • 堆:由程序员手动申请和释放,用于存储动态分配的内存,如大型数据结构和对象。堆的空间较大,可以动态扩展内存空间,以满足程序的需求。
  2. 管理方式:

    • 栈:由操作系统自动管理,其生命周期与函数调用周期相匹配。函数调用结束后,栈上分配的内存会自动被释放,无需程序员过多考虑内存的分配和释放问题。
    • 堆:需要程序员自行负责内存管理,使用完毕后必须手动释放,否则会导致内存泄漏或其他问题。堆的内存管理涉及复杂的算法,可能会引入额外的开销。
  3. 空间大小:

    • 栈:空间大小相对较小,主要用于存储临时变量和控制信息。
    • 堆:空间较大,可以动态分配大块内存以满足程序的需求。
  4. 生长方向:

    • 栈:向低地址扩展。
    • 堆:向高地址扩展。
  5. 效率:

    • 栈:由于分配和释放是自动进行的,所以操作效率比堆高。访问栈中的数据直接存放在系统内存中,速度较快。
    • 堆:操作涉及复杂的内存管理算法,可能会引入额外的开销,导致访问速度相对较慢。访问堆中的数据需要通过指针进行间接访问,会造成一定的时间损耗。
  6. 应用场景:

    • 栈:适合用于存储局部变量和函数调用,主要用于内存的临时分配。
    • 堆:适合用于存储需要动态分配和管理的数据结构,如动态数组、字符串、对象等。

举例:

创建一个debug.h的窗口类

 栈方式,静态创建对象(没有星号*,不是指针):

debug aa2;
aa2.setModal(true);
aa2.showNormal();//此方式窗口一闪而过

int age=18;

堆方式,动态创建

debug* aa2;

aa2 = new debug(this);

aa2->setModal(true);

aa2->showNormal();

如何限制对象建立在栈上呢?不让静态创建对象

设置析构函数private

 调用是提示不可访问

QT的内存回收机制:

Qt中有内存回收机制, 但是不是所有被new出的对象被自动回收, 满足条件才可以回收

如果想要在Qt中实现内存的自动回收, 需要满足以下两个条件:

  1. 创建的对象必须是QObject类的子类(间接子类也可以)
  2. 创建出的类对象, 必须要指定其父对象是谁, 一般情况下有两种操作方式:

     参考:https://blog.csdn.net/qq_41701723/article/details/131889164

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

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

相关文章

最近很多朋友都消失了。。。

你好,我是郭震 1 聊聊现状 最近听到一些铁铁们,跟我聊,聊到现在的工作情况。 有的工作几年被裁,现在待业找工作。 还有些学校毕业目前未找到工作。 还有一些从上海、北京离开回老家了。 关注我的很多都是IT相关或对编程学习感兴趣…

(南京观海微电子)——液晶画面Crosstalk的原理与本质分析

一、H-Crosstalk (与EE开发相关) 1.画面轻重载切换交界处有水平弱线或Block – Power IC 相关 – Root cause:AVDD drop 后恢复过慢 – Solution : Power IC 补偿调整优化 范例:AVDD在重载区Drop明显,且恢复较慢导致的Hcrosstalk;…

目录穿越漏洞CVE-2018-7171复现 又学到一招小技巧!!!!

还是半夜睡不着,打开靶机开始操作。今天看了文件下载和目录穿越漏洞想结合以及防御方法。半夜来进行操作一波。复现一下漏洞,这个网上的文章页比较的少!!! 开始操作起来!!! 进入到页…

Vue3中的常见组件通信之`$refs`、`$parent`

Vue3中的常见组件通信之$refs、$parent 概述 ​ 在vue3中常见的组件通信有props、mitt、v-model、 r e f s 、 refs、 refs、parent、provide、inject、pinia、slot等。不同的组件关系用不同的传递方式。常见的撘配形式如下表所示。 组件关系传递方式父传子1. props2. v-mod…

Linux “ 软件管理 “

软件管理 widows 安装 方法一: 双击exe安装包,就可以安装。 用exe安装的软件会破记录到注册表中。 注册会记录安装位置,软件名称。 方法二: 用绿色方式进行安装。 不用写到注册表中,因此无法在开始菜单里面查看和卸…

javascript二进制流转图片的操作方法:File、Blob、FileReader、ArrayBuffer、Base64格式之间的转换

文章目录 引言I 使用img标签来加载图片1.1 使用img标签来加载图片1.2 在加载图片时进行身份验证: sign/AuthorizationII 跨域请求中包含凭证2.1 Fetch API在跨域请求中包含凭证2.2 ajax在跨域请求中包含凭证III 显示图片方式3.1 创建一个URL指向这个Blob对象3.2 获取ArrayBuff…

用AI制作历史解说视频:GPT + MidJourney + PiKa + FunSound + 剪映

1. 项目介绍 最近某站看到一个看到利用AI创作视频解说,成品画面很酷炫。对此以初学者视角进行复现,创意来源:用AI制作历史解说视频 2. 开始创作 我们参照原作者展示的内容,对古代人物屈原来生成解说视频。 2.1 故事脚本分镜 【…

C++全栈聊天项目(20) 聊天列表动态加载

聊天列表动态加载 如果要动态加载聊天列表内容,我们可以在列表的滚动区域捕获鼠标滑轮事件,并且在滚动到底部的时候我们发送一个加载聊天用户的信号 bool ChatUserList::eventFilter(QObject *watched, QEvent *event) {// 检查事件是否是鼠标悬浮进入…

dockerhub不可用临时解决方案

近日,在拉取一些docker hub的镜像的时候死活拉不下来,要么超时,要么无法接站点地址,不管是docker hub,还是国内镜像站,统统都不行了。 经过各大媒体报道,以及自己的亲身验证,才知道&#xff0c…

[imx6ull]Linux下的SocketCAN通信

文章目录 一、CAN总线协议1.简介2.电气属性3.通信原理①数据帧的帧格式:②总线同步③总线竞争④数据保护 二、Linux下CAN的操作1.硬件连接①CAN电平转换器②扩展板使用CAN 2.查询 can 信息3.开启/关闭 can4.发送/接收 can 数据5.设置 can 参数 三、CAN的回环测试四、…

Spring之SpringMVC源码

SpringMVC源码 一、SpringMVC的基本结构 1.MVC简介 以前的纯Servlet的处理方式: Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String type req.getParameter(Constant.REQUEST_PA…

Autodesk 3ds Max软件下载安装;3ds Max功能强大的三维建模、渲染软件安装包获取

3ds Max,无论是初学者还是资深设计师,都能通过3ds Max在数字世界中实现自己的创意,打造出令人惊叹的三维作品。 在3ds Max中,灯光系统是至关重要的一环。它提供了光度学灯光和标准灯光两种主要类型,用于照亮和增强场景…

预备知识----技术架构演进之路

单机架构 简介:应用服务和数据库服务共用一台服务器。 出现原因:出现在互联网早期,访问量较小,单机足以满足需求。 架构工作原理:通过应用(划分了多个模块)和数据库在单个服务器上写作完成业务…

Liunx环境下redis主从集群搭建(保姆级教学)01

Linux 环境安装redis 准备一台linux虚拟机 我使用基于Linux的开源类服务器操作系统CentOS7。 打开虚拟机,输入密码登录 下载linux版本的redis安装包 已经下载redis-5.0.10.tar.gz 创建一个文件夹用来安装redis,我在/opt目录下创建redis文件夹 将下载好的redis…

前端_调试工具_Chrome Devtools

目录 一、上左侧菜单功能 1.选择功能 2.手机/电脑 显示切换功能 3.内存 4.元素 5.控制台 6.源代码/来源 7.网络 8.应用 9.性能 10.安全 11.Lighthouse 12.记录器 13.性能数据分析 二、上右侧菜单功能 1.警告 2.设置 3....更多功能 谷歌浏览器自带了调试工具C…

AE电源pinnacle软件新款老款二款软件

AE电源pinnacle软件新款老款二款软件

数据中心运维管理方案

数据中心运维管理方案 随着数据中心在现代信息社会中的重要性日益增加,高效、可靠的运维管理方案成为保障其稳定运行的关键。本文将探讨数据中心运维管理的策略和实践,旨在为运维团队提供全面、系统的管理方法,确保数据中心在任何情况下都能…

(文章复现)低温环境下考虑电池寿命的微电网优化调度

参考文献: [1]丁佳昀,胡秦然,吴在军,等.低温环境下考虑电池寿命的微电网优化调度[J].中国电机工程学报,2024,44(10):3815-3824. 1.摘要 储能系统作为微电网重要组成部分,为微电网协调能量供需提供了解决方案。然而,在低温环境下&#xff0c…

抽象类接口(超详细)

抽象类&接口(超详细) 一:抽象类和抽象方法 封装:对象代表什么,就得封装对应的数据,并提供数据对应的行为 如果老师的work是教书,学生的work是学习。以前我们是在父类里面写一个work随便写一个方法体,然后子类重写。但是有一个弊端,如果子类不是你写的,是别人写…

嵌入式仪器模块:波形发生器模块(嵌入式)

• 16 位分辨率 • 125 MHz 刷新率 • 支持生成 FSK/ASK 信号 应用场景 • 生成任意标准波形或用户自定义波形 • 在特殊协议通信中模拟某个波形 • 无线充电(信号调制) 道114输出阻抗Low-ZLow-ZLow-Z输出范围 5 V 5 V 6 V耦合DCDCDC带宽4 MHz10 M…