作为Qt的新手,我只是在徘徊,以下简单的代码是否会有任何内存泄漏。
#include <QtGui>
int main(int argc, char * argv[])
{
QApplication app(argc, argv);
QMainWindow *win = new QMainWindow();
win->show();
return app.exec();
}
此代码运行正常。但是QMainwindow
正在堆中创建,而似乎没有合适的位置从堆中向delete
插入语句。虽然程序堆空间似乎会在程序终止后释放。在编写Qt程序时,我觉得这是否是一个好的风格。
我在一些Qt示例中看到了这种Qt编程风格。所以我在这里提出问题的建议。
感谢您的任何想法。
答案 0 :(得分:4)
Qt非常依赖于资源清理的对象/窗口小部件层次结构。子窗口小部件是其父窗口小部件的子对象,因此当父窗口被删除时,子窗口也会被清除。
因此,我建议您确保正确删除QMainWindow,因此在添加子窗口小部件时,您可以知道在程序关闭时它们的所有资源都已正确销毁。
要执行此操作,请在main()
:
QMainWindow win;
win.show();
或者使用各种智能指针类之一来确保清理:
QScopedPointer<QMainWindow> win = new QMainWindow;
win->show();
答案 1 :(得分:1)
这不是你需要过多担心的内存泄漏,但你可以通过让QMainWindow
成为QApplication
的孩子来解决它:
QMainWindow *win = new QMainWindow(&app);
QObjects
例如QApplication
删除所有子对象。因此,在这种情况下,QApplication
会在QMainWindow
超出范围时删除app
。
答案 2 :(得分:0)
您可以将显示设置为窗口小部件,并将其放在主窗口中。这将更加灵活,并使您能够控制主窗口的膨胀。但这更多是关于设计而不是关于Qt本身......