转载:https://blog.csdn.net/myjqc/article/details/8569196 (链接错误解决办法)

我们都知道在C++中,new和delete是成对出现的,那么在QT中内存中是不是同样如此呢,我们来验证一下。

第一步新建工程: MyWidget

第二步:添加一个自定义的按钮类(MyButton)

第三步:修改自定义按钮类的父类为QPushButton(QPushButton也是继承自QWidget),同时自定义按钮类添加析构函数,并在析构函数里打印输出

mybutton.h

#ifndef MYBUTTON_H
#define MYBUTTON_H #include <QPushButton> class MyButton : public QPushButton
{
Q_OBJECT
public:
explicit MyButton(QWidget *parent = );
    ~MyButton();
signals:

public slots:

};

#endif // MYBUTTON_H

mybutton.cpp

#include "mybutton.h"
#include <QDebug> MyButton::MyButton(QWidget *parent) :
QPushButton(parent)
{
} MyButton::~MyButton()
{
qDebug() << "析构函数被调用了";
}

第四步:在主窗口上创建显示

#include "mywidget.h"
#include "mybutton.h" MyWidget::MyWidget(QWidget *parent)
: QWidget(parent)
{
MyButton *pBtn = new MyButton(this);
pBtn->setText(QStringLiteral("我是动态创建的按钮,我不手动释放"));
} MyWidget::~MyWidget()
{ }

第五步:开始调试,发生了链接错误

原因是moc没有更新,无论怎么重新构建,清理,构建都不行,用一个笨办法解决了:就是删除项目同名文件夹下的调试文件夹

然后重新调试运行,成功了

第六步:关闭窗口,程序退出,看自定义按钮类的析构函数是否被调用

可以看到打印出了 析构函数被调用。因此我们总结出,在QT中,有它自己的内存回收机制,但也是有前提条件的:

1.动态创建的对象必须指定父对象

2.动态创建的对象直接或者间接继承于QObject基类

QT笔记之内存管理的更多相关文章

  1. 6.关于QT中的内存管理,动态的制作,动态库的调用,静态库的制作

     一  QT的内存管理 1  QT中的内存管理是QObject来管理的 2  QT中的内存管理没有cocos2dx中的引用计数 3  组件能够指定父对象 QTimer *timer = QTime ...

  2. linux kernel学习笔记-5内存管理_转

    void * kmalloc(size_t size, gfp_t gfp_mask); kmalloc()第一个参数是要分配的块的大小,第一个参数为分配标志,用于控制kmalloc()的行为. km ...

  3. XV6学习笔记(2) :内存管理

    XV6学习笔记(2) :内存管理 在学习笔记1中,完成了对于pc启动和加载的过程.目前已经可以开始在c语言代码中运行了,而当前已经开启了分页模式,不过是两个4mb的大的内存页,而没有开启小的内存页.接 ...

  4. Linux内核设计笔记12——内存管理

    内存管理学习笔记 页 页是内核管理内存的基本单位,内存管理单元(MMU,管理内存并把虚拟地址转化为物理地址的硬件)通常以页为单位进行处理,从虚拟内存的角度看,页就是最小单位. struct page{ ...

  5. 《代码的未来》读书笔记:内存管理与GC那点事儿

    一.内存是有限的 近年来,我们的电脑内存都有好几个GB,也许你的电脑是4G,他的电脑是8G,公司服务器内存是32G或者64G.但是,无论内存容量有多大,总归不是无限的.实际上,随着内存容量的增加,软件 ...

  6. 嵌入式linux学习笔记1—内存管理MMU之虚拟地址到物理地址的转化

    一.内存管理基本知识 1.S3C2440最多会用到两级页表:以段的方式进行转换时只用到一级页表,以页的方式进行转换时用到两级页表.页的大小有三种:大页(64KB),小页(4KB),极小页(1KB).条 ...

  7. iOS阶段学习第21天笔记(ARC内存管理-Copy-代理)

    iOS学习(OC语言)知识点整理 一.OC 中的ARC内存管理 1)ARC中释放对象的内存原则:看这个对象有没有强引用指向它 2)strong:强引用,默认情况下的引用都是强引用 3) weak:弱引 ...

  8. iOS 阶段学习第九天笔记(内存管理)

    iOS学习(C语言)知识点整理 一.内存管理 1)malloc , 用于申请内存; 结构void *malloc(size_t),需要引用头文件<stdlib.h>:在堆里面申请内存,si ...

  9. Linux内核学习笔记——内核内存管理方式

    一 页 内核把物理页作为内存管理的基本单位:内存管理单元(MMU)把虚拟地址转换为物理 地址,通常以页为单位进行处理.MMU以页大小为单位来管理系统中的也表. 32位系统:页大小4KB 64位系统:页 ...

随机推荐

  1. SpringMVC注解式开发之接收请求参数

    逐个接收(涉及注解@RequestParam) index.jsp的name必须和后端的名字一致,第一种才可以实现. 以对象形式整合接收 域属性参数的接收 数组或集合参数的接收 restfull风格传 ...

  2. QT 添加 lib库

    扒自网友文章: 一.添加第三方的头文件 首先,添加头文件  #include "ControlCAN.h" 然后,再将这个头文件放到工程的目录下 二.添加.lib文件 首先,将.l ...

  3. 输出调试技巧 PRINTF()

    #define PRINTF(...) \ do { \ printf( "%d:%s::",__LINE__, __FUNCTION__);\ printf(__VA_ARGS_ ...

  4. c#之枚举,结构体

    1.枚举 2.结构体 例子1: using System; using System.Collections.Generic; using System.Linq; using System.Text ...

  5. Android -- 打造我们的StepView

    1,前两天我们分析了Github开源的StepView <自定义StepView实现个人信息验证进度条>,这两天想着想自己写一个,so,就有了这一篇文章,不废话,先看看实现的效果: 2,首 ...

  6. 002-golang安装配置

    1.安装位置: 2.环境变量. path的值如下: 3.工作目录.

  7. 如何在Sitecore CMS中创建项目

    从功能区 打开Sitecore的内容编辑器,选择内容树中的项目.创建的项目将作为所选项目的子项添加. Sitecore 8显示所选的Home项目 Sitecore 6和7显示所选的Home项目 功能区 ...

  8. CSS小知识-----前缀-moz-、-ms-、-webkit-,-o-分别代表的意思

    这种方式在业界上统称:识别码.前缀 -ms-代表[ie]内核识别码 -moz-代表火狐[firefox]内核识别码 -webkit-代表谷歌[chrome]/苹果[safari]内核识别码 -o-代表 ...

  9. 刨根究底字符编码之—UTF-16编码方式

    在网上已经转悠好几天了, 这篇文章让我知道了UTF-16的前世今生, 感谢作者https://cloud.tencent.com/developer/article/1384687 1. UTF-16 ...

  10. flask 文件上传(单文件上传、多文件上传)

    文件上传 在HTML中,渲染一个文件上传字段只需要将<input>标签的type属性设为file,即<input type=”file”>. 这会在浏览器中渲染成一个文件上传字 ...