Qt内存自动释放问题
Qt内存自动释放机制
1、Qt是靠父子对象机制实现内存自动释放的,QT的父子对象机制是在 QWidget和QOject中实现的。当我们使用父对象来创建一个对象的时候 ,父对象会把这个对象添加到自己的子对象列表中。当这个父对象被删除的时候,它会遍历它的子对象类表并且删除每一个子对象,然后子对象们自己再删除它们自己的子对象,这样递归调用直到所有对象都被删除。
2、main函数里面main widget/dialog/mainWindow是分配在栈上的,其他new出来的东西都以这个widget作为父亲。 当程序最后结束了,main widget弹栈。父类被销毁。子类跟着被销毁。 所以如果你自己new 出来的。没有父类,不删除就会造成内存泄漏。
什么情况下窗口会销毁
当我们将一个A窗口作为父窗口,B窗口作为A窗口的子窗口,如果直接关闭B窗口,由于主窗口不销毁,B窗口是不会被销毁的,会一直占内存。
可以通过设置以下接口立即销毁:
this->setAttribute(Qt::WA_DeleteOnClose, true);
之后直接调close()关闭子窗口,即可成功释放new出来的内存。