QT c++ 堆栈一些理解--限制对象建立在栈上--栈堆区别 QT的内存回收机制:

图示形象化理解:

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

堆:理解为一个堆积物体,独立的分散的,当需要空间时,再找一个地方。需要的就是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

相关推荐

  1. C++中内存定义以及区别

    2024-06-10 07:50:03       5 阅读
  2. 区别

    2024-06-10 07:50:03       33 阅读
  3. 【数据结构】区别

    2024-06-10 07:50:03       15 阅读
  4. C语言内存管理以及空间空间区别

    2024-06-10 07:50:03       37 阅读
  5. 第七讲 对象基本组成-引用-内存-内存

    2024-06-10 07:50:03       17 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-10 07:50:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-10 07:50:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-10 07:50:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-10 07:50:03       18 阅读

热门阅读

  1. 【设计模式】结构型设计模式之 享元模式

    2024-06-10 07:50:03       9 阅读
  2. 免费热榜API——哔哩哔哩

    2024-06-10 07:50:03       12 阅读
  3. 探索Excel的隐藏功能:如何求和以zzz开头的列

    2024-06-10 07:50:03       11 阅读
  4. 南京领动云计算-AI工程师-面试经历

    2024-06-10 07:50:03       10 阅读
  5. 软件测试基础知识总结

    2024-06-10 07:50:03       8 阅读
  6. DDoS攻击与防御

    2024-06-10 07:50:03       6 阅读
  7. 定时清理Linux服务器缓存shell脚本

    2024-06-10 07:50:03       11 阅读
  8. Radash 轻量级的函数工具集

    2024-06-10 07:50:03       8 阅读
  9. 哈夫曼树详解

    2024-06-10 07:50:03       6 阅读
  10. UML的用例图

    2024-06-10 07:50:03       8 阅读
  11. SASS控制指令与循环

    2024-06-10 07:50:03       6 阅读