参考视频:https://www.bilibili.com/video/BV1XW411x7NU?p=16

Qt中内存的回收是自己完成的,实验中,我们自定义一个按钮,通过重写析构函数来观察现象。

新建工程后,再添加自定义的按钮之后,有如下文件:

mybutton.h和mybutton.cpp是我们自定义的文件,里面实现了我们自定义的按钮类。

mybutton.h文件中的代码:

 1 #ifndef MYBUTTON_H
2 #define MYBUTTON_H
3
4 //#include <QWidget>
5 #include <QPushButton>
6
7 class mybutton : public QPushButton
8 {
9 Q_OBJECT
10 public:
11 explicit mybutton(QWidget *parent = nullptr);
12 //重写一个析构函数
13 ~mybutton();
14
15 signals:
16
17 public slots:
18 };
19
20 #endif // MYBUTTON_H

mybutton.cpp文件中的代码:

 1 #include "mybutton.h"
2 #include <QDebug>
3
4 //mybutton::mybutton(QWidget *parent) : QPushButton(parent)
5 //QPushButton(parent):用于给基类构造函数传参
6 mybutton::mybutton(QWidget *parent) : QPushButton(parent)
7 {
8
9 }
10
11 mybutton::~mybutton()
12 {
13 qDebug("按钮被析构");
14 }

widget.h文件就是自动生成的代码,没做改动,就不贴出来了。

widget.cpp文件的代码如下:

 1 #include "widget.h"
2 #include "mybutton.h"
3
4 Widget::Widget(QWidget *parent)
5 : QWidget(parent)
6 {
7 //1)指定父对象后 2)直接或间接继承于QObject
8 //子对象如果是动态分配空间的,不需要手动释放delete
9 //系统会自动释放
10 mybutton *b = new mybutton(this);
11 b->move(100, 100);
12 b->setText("button");
13 b->resize(200, 100);
14 }
15
16 Widget::~Widget()
17 {
18
19 }

运行,进行测试:

我们把窗口关闭,会出现如下打印:

可以看出,内存被自动回收了。

Qt内存回收机制的更多相关文章

  1. Qt ------ 内存回收机制、new对象的回收

    写在前面的总结: 建议:对于不能指定父对象的对象(对象通过moveToThread()移入其他线程.没有继承QObject的类产生的对象),在其他线程通过deleteLater()内存回收,其他通过指 ...

  2. Qt中的内存回收机制

    Qt中的内存回收机制 在Qt中创建对象的时候会提供一个 Parent对象指针(可以查看类的构造函数),下面来解释这个parent到底是干什么的. QObject是以对象树的形式组织起来的.当你创建一个 ...

  3. Qt 内存管理机制(转)

      许转载http://devbean.blog.51cto.com/448512/526734 强类型语言在创建对象时总会显式或隐式地包含对象的类型信息.也就是说,强类型语言在分配对象内存空间时,总 ...

  4. Qt 内存管理机制

    这篇文章首先发布于我的主页 http://www.devbean.info,以后也会直接发布在那里.现在有 Flex 4 的一篇和 <从 C++ 到 Objective-C>系列,感谢大家 ...

  5. Android 操作系统的内存回收机制(转载)

    Android 操作系统的内存回收机制(转载) Android APP 的运行环境 Android 是一款基于 Linux 内核,面向移动终端的操作系统.为适应其作为移动平台操作系统的特殊需要,谷歌对 ...

  6. JVM内存回收机制简述

    JVM内存回收机制涉及的知识点太多了,了解越多越迷糊,汗一个,这里仅简单做个笔记,主要参考<深入理解Java虚拟机:JVM高级特性与最佳实践(第二版)> 目前java的jdk默认虚拟机为H ...

  7. memcache的内存回收机制

    memcache不会释放内存,而是重新利用. 在缓存的清除方面,memcache是不释放已分配内存.当已分配的内存所在的记录失效后,这段以往的内存空间,memcache只会重复利用. memcache ...

  8. JVM内存回收机制

    1. JVM内存回收机制简述 http://www.cnblogs.com/lzrabbit/p/3826738.html

  9. Android 操作系统的内存回收机制[转]

    转自:http://www.ibm.com/developerworks/cn/opensource/os-cn-android-mmry-rcycl/ Android APP 的运行环境 Andro ...

  10. Redis的内存回收机制

    Redis的内存回收机制 2018年01月16日 17:11:48 chs007chs 阅读数:1172   Redis的内存回收机制主要体现在一下两个方面: 删除过期时间的键对象 删除过期键对象 : ...

随机推荐

  1. python中的赋值、浅拷贝、深拷贝的区别

    赋值: 可变类型:赋值前后id不会变,赋值后的数据会随源数据变化: 不可变类型:赋值前后id不会变,赋值后的数据不会随源数据变化: 浅拷贝(copy): 可变类型:copy前后id会变,可变类型中存储 ...

  2. redis和memcached的区别和使用场景

    Redis 和 Memcached 都是基于内存的数据存储系统.Memcached是高性能分布式内存缓存服务,其本质上就是一个内存key-value数据库.Redis是一个开源的key-value存储 ...

  3. tomcat 服务版本内存设置

    1. 安装服务,如需指定java路径,需要在service.bat 中修改, 如下图 其中 pa代表当前目录 2. 安装服务, service.bat install 服务名,如下图示例 3. 内存设 ...

  4. 关于<property name="hibernate.hbm2ddl.auto"></property>中的参数填写

    hibernate的数据库表自动生成参数 关于<property name="hibernate.hbm2ddl.auto"></property>中的参数 ...

  5. 4.CSS层次选择器

    1.后代选择器:在某个元素的后面 1 /*后代选择器*/ 2 body p{ 3 background: crimson; 4 } 2.子选择器:仅一代 1 /*子选择器*/ 2 body>p{ ...

  6. 力扣14(java)-最长公共前缀(简单)

    题目: 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入:strs = ["flower"," ...

  7. [FE] Quasar BEX 所有位置类型 types

    科普:[FE] Quasar BEX 预览版指南 New Tab Quasar BEX 的默认类型是 New Tab,在新 tab 栏里打开内容. Dev Tools 也就是在开发者栏里面的内容. O ...

  8. [PHP] Laravel 联查中对不同表字段关系加条件的方式

    如果条件需要加在 where 条件里,使用 whereColumn,如下示例: whereColumn('A.b_id', '=', 'B.id'); 如果需要加载 join 的 on 之后作为多个条 ...

  9. dotnet 将任意时区的 DateTimeOffset 转换为中国时区时间文本

    本文告诉大家在拿到任意时区的 DateTimeOffset 对象,将 DateTimeOffset 转换为使用中国的 +8 时区表示的时间 在开始之前,需要说明的是,采用 DateTimeOffset ...

  10. WPF 获取本机所有字体拿到每个字符的宽度和高度

    本文主要采用 GlyphTypeface 类尝试获取每个字符的宽度和高度的值,尽管这个方法和最终 WPF 布局使用的文本的宽度和高度是不相同的,但是依然可以作为参考 获取系统字体文件夹的文件 系统字体 ...