首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt中的内存管理: AddressBook教程

Qt中的内存管理: AddressBook教程
EN

Stack Overflow用户
提问于 2014-04-21 10:39:59
回答 1查看 249关注 0票数 4

因此,到目前为止,我已经了解到,当父对象被删除时,Qt会释放所有子对象的内存。另外,人们通常不需要关心堆栈上创建的对象的内存管理(即不是作为指针)。

现在,当我完成非常好的"AddressBook“教程时,我在第5部分中发现了这一点:

代码语言:javascript
复制
AddressBook::AddressBook(QWidget *parent) : QWidget(parent)
{
    dialog = new FindDialog;
}

可获得完整的源代码:addressbook.h addressbook.cpp finddialog.h

在这里,dialogAddressBook的私有成员,它是指向FindDialog的指针。FindDialog继承了QDialog,但是没有将this-Pointer传递给构造函数(如上面所示)。不存在显式析构函数,不存在delete dialog-call.

而且,没有通过this似乎是有意的:

FindDialog的构造函数被定义为接受父QWidget,尽管对话框将作为单独的窗口打开。

这不会导致记忆泄露吗?或者是否还有其他机制可以悄悄地删除dialog并释放其内存?

提前感谢您的帮助!

更新:,我把这个问题发到qt-project.org论坛上了,应该很快就能解决了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-21 10:54:12

这是没有借口的,而且它最终会比你刚才提到的问题更多,即:

  • 它没有像你说的那样被管理。
  • 它不使用常规的新Foo()语法。
  • 它不是在构造函数的初始化程序列表中完成的。

一旦应用程序退出,操作系统可能会释放它,但是,无论如何,我总是直言不讳地反对这些问题,特别是在示例项目中。我认为,适当的修复方法是使用堆栈对象而不是堆对象或QPointer

详情见以下帖子,以防后者:

如何使(几乎)每个Qt/KDE应用程序崩溃以及如何修复

这应该是报告和固定上游;好渔获物!

我刚刚向Gerrit提交了一份关于这个在这里的修改。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23195712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档