转载: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. HttpClient超时设置setConnectionTimeout和setSoTimeout

    http是基于TCP/IP进行通信的,tcp通过3次握手建立连接,并最终以4次挥手终止通信. 知乎上对三次握手和四次挥手有如下解释: 作者:知乎用户链接:https://www.zhihu.com/q ...

  2. System.Data.Entity.Core.EntityException: The underlying provider failed on Open. ---> System.InvalidOperationException: 超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。

    2017/8/15 20:55:21 [AgentPayQuery_205506102_1BBBB]系统异常:System.Data.Entity.Core.EntityException: The ...

  3. 多表关联查询_resultMap_集合对象

    多表关联查询_resultMap_集合对象_N+1方式实现 package com.bjsxt.mapper; import java.util.List; import com.bjsxt.pojo ...

  4. react native 初识生命周期

    关于生命周期这块,我是看到慕课堂的一个视频,觉得将的很好,引入很容易理解,地址是:https://www.imooc.com/video/14288  如果你们想了解一下,也可以去看看 RN 组件的生 ...

  5. HDU 1568 Fibonacci(大数前4位)

    转载自:http://blog.csdn.net/thearcticocean/article/details/47615241 分析:x=1234567.求其前四位数: log10(x)=log10 ...

  6. 记前些日子archlinux更新后无法调节声音的解决方法

    桌面环境用的是xfce4. 自从某次更新过后,panel中调节声音的插件变成了 xfce4-pulseaudio-plugin.然后就发现在panel中无法调节声音了. 在这个插件的属性中发现了一项设 ...

  7. html5-css渐变色

    div{    width: 300px;    height: 100px;    margin: 50px;    padding: 50px;    border:5px groove rgba ...

  8. Widget Factory (高斯消元解线性方程组)

    The widget factory produces several different kinds of widgets. Each widget is carefully built by a ...

  9. 大数据处理框架之Strom:kafka storm 整合

    storm 使用kafka做数据源,还可以使用文件.redis.jdbc.hive.HDFS.hbase.netty做数据源. 新建一个maven 工程: pom.xml <project xm ...

  10. Lua语言特色

    [1]多重赋值 多重赋值规则:若值的个数少于变量的个数,那么多余的变量会被赋值为nil 若值的个数多余变量的个数,那么多余的值会被“悄悄地”丢弃掉. 多重赋值应用示例: a, b = , * prin ...