[英]Memory-Management in Qt: AddressBook tutorial
所以,我到目前为止已经了解到,当父对象被删除时,Qt会释放所有子对象的内存。 此外,人们通常不必关心在堆栈上创建的对象的内存管理(即不作为指针)。
现在,当我做了非常好的“AddressBook”教程时 ,我在第5部分中找到了这个:
AddressBook::AddressBook(QWidget *parent) : QWidget(parent)
{
dialog = new FindDialog;
}
提供完整的源代码: addressbook.h
addressbook.cpp
finddialog.h
这里, dialog
是AddressBook
的私有成员,它是一个指向FindDialog
的指针。 FindDialog
继承了QDialog
,但没有this
-Pointer传递给构造函数(如上所示)。 没有显式的析构函数,没有delete dialog
调用...
此外,没有通过this
似乎是故意的:
[FindDialog的]构造函数被定义为接受父QWidget,即使该对话框将作为单独的窗口打开。
这不会导致内存泄漏吗? 或者是否有其他机制会静默删除dialog
并释放其内存?
在此先感谢您的帮助!
更新:我已将此问题发布到qt-project.org论坛 ,应尽快修复。
这没有任何借口,它最终会有比你刚才提出的问题更多的问题,即:
它不像你说的那样管理。
它不使用传统的新Foo()语法。
它不是在构造函数的初始化列表中完成的。
一旦应用程序退出,操作系统可能会释放它,但无论如何,我总是反对这些问题,特别是在示例项目中。 在我看来,适当的修复方法是使用堆栈对象而不是堆对象或QPointer
。
有关后者的详细信息,请参阅以下帖子:
这应该在上游报告和修复; 接得好!
我刚刚在这里向Gerrit提交了关于此的更改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.