qt - 我是否需要显式删除顶级窗口以避免 Qt 中的内存泄漏?

标签 qt memory-management

在 Qt 中,在构造 QObject 时会分配父级。将 parent 设置为 0 会构造一个没有父对象的对象。如果对象是一个小部件,它将成为一个顶级窗口。如果我在堆上创建一个顶级窗口,是否需要显式删除顶级窗口以避免内存泄漏?或者 Qt 会处理它。如果是这样,Qt什么时候删除它?在关闭小部件或关闭应用程序时?

最佳答案

据我了解,现有的两个答案都是错误的。

https://qt.gitorious.org/qt/qtbase/source/f02e1d6d8e0ee560667b445e8fa43bde85e31f41:src/widgets/kernel/qapplication.cpp#L770

当 QApplication 被销毁时,顶层小部件全部被删除。

在顶级窗口关闭之前QApplication确实不会从事件循环中返回,但这与问题无关。

只要您的 QApplication 被正确销毁(即在堆栈上创建或以其他方式删除),所有小部件都将被删除。

您不必删除顶级小部件,并且不这样做不会导致技术或其他方面的泄漏。

(这不是顶级QObjects的情况,只有QWidgets,由QApplication跟踪)

关于qt - 我是否需要显式删除顶级窗口以避免 Qt 中的内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22939872/

相关文章:

qt - 未调用 QObject 析构函数

c - C 中的 Abort Trap 6 错误和调试

qt - 是否可以将自定义字体应用于 QML 中的所有元素?

linux - Qt 不会在 Linux 的 debug/release 文件夹中创建输出文件

linux - 嵌入式 Qt 鼠标指针不显示

multithreading - 用互斥锁同步线程

c++ - Qt、MSVC 和/Zc :wchar_t- == I want to blow up the world

algorithm - 如何处理内存分配的时间复杂度?

php memory_get_usage(true) vs top %MEM

c - 什么时候将内存分配给C中的局部变量