QT笔记之内存管理

本文通过一个具体实例演示了在QT中如何正确地管理内存。实验表明,只要动态创建的对象指定了父对象并直接或间接继承自QObject基类,QT将自动调用析构函数进行资源回收。

 转载:https://blog.youkuaiyun.com/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 = 0);

    ~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基类

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值