因此,到目前为止,我已经了解到,当父对象被删除时,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-call.
而且,没有通过this似乎是有意的:
FindDialog的构造函数被定义为接受父QWidget,尽管对话框将作为单独的窗口打开。
这不会导致记忆泄露吗?或者是否还有其他机制可以悄悄地删除dialog并释放其内存?
提前感谢您的帮助!
更新:,我把这个问题发到qt-project.org论坛上了,应该很快就能解决了。
发布于 2014-04-21 10:54:12
这是没有借口的,而且它最终会比你刚才提到的问题更多,即:
一旦应用程序退出,操作系统可能会释放它,但是,无论如何,我总是直言不讳地反对这些问题,特别是在示例项目中。我认为,适当的修复方法是使用堆栈对象而不是堆对象或QPointer。
详情见以下帖子,以防后者:
如何使(几乎)每个Qt/KDE应用程序崩溃以及如何修复
这应该是报告和固定上游;好渔获物!
我刚刚向Gerrit提交了一份关于这个在这里的修改。
https://stackoverflow.com/questions/23195712
复制相似问题