Qt内存回收机制

参考视频: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
View Code

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 }
View Code

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 }
View Code

运行,进行测试:

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

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

posted @ 2020-06-14 21:23  zhengcixi  阅读(563)  评论(0编辑  收藏  举报
回到顶部