参考视频: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 }
运行,进行测试:
我们把窗口关闭,会出现如下打印:
可以看出,内存被自动回收了。