Qt学习笔记(四):Qt 的内存回收机制


在 Qt 中,QObject 是顶层对象,当 Qt 程序关闭的时候,QObject 对象会被自动释放掉:

我们知道,C++ 中指针对象在使用的时候,需要手动分配空间(new),否则会出现“段错误”;当指针对象不再使用的时候,需要手动释放空间(delete),否则会导致内存泄漏;

但是在 Qt 中,只要我们创建的指针对象(new 出来的对象),指定其父对象直接或间接的继承于 QObject,那么就不需要我们手动去释放,Qt 会自动帮我们释放;

因为 Qt 中有一个对象树的概念,即在对象树的结构中,当父对象析构的时候,其所有的子对象都会被析构,下面举例说明:

在项目中添加两个 自定义的 QPushButton 对象:

用同样的方法,再创建一个 MyButton2;创建好之后项目结构为:

然后在 mywidget.h 中创建两个上面新建类的指针对象:

然后在 mywidget.cpp 中实例化这两个指针对象,一个对象间接继承于 QObject,一个对象不继承于 QObject:

程序启动然后关闭时,输出结果如下:

可见,由于 MyButton1 对象间接继承于 QObject,所以程序关闭的时候会自动析构;

而 MyButton2 对象没有继承于 QObject,所以不会被自动析构;

可以使用 delete 关键字主动析构,释放内存: