gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:26:27 26 4
gpt4 key购买 nike

在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com