【发布时间】:2014-04-18 01:12:08
【问题描述】:
假设我有以下 sn-p,在 qto 的析构函数中为它可能管理的其他 QT 对象调用 deleteLater 是否安全?
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyQTObject qto;
qto.show();
return a.exec();
}
因为我已经使用泄漏检测器分析了类似的代码,并且调用了 deleteLater 的所有对象都没有正确释放,除非我用普通删除替换调用。 如果我理解正确的话,deleteLater 只会在 QT 消息队列中注册一个删除事件。这可能是在 main 范围的末尾调用 qto 的析构函数而 QT 消息循环已经以 a.exec 的返回结束的问题吗?因此删除事件将永远不会被处理,实际上甚至不会被推送到消息队列中,因为没有?
【问题讨论】:
-
您不需要稍后在
qto上删除。它在堆栈上。顺便说一句,分析器可以报告误报。 -
@UmNyobe,问题询问是否可以安全地调用 deleteLater...对于它可能管理的其他 QT 对象,而不是 qto 本身。
-
这很容易测试。只需将一些调试消息放入析构函数中,看看它们是否出现。你会注意到他们不会。这些对象不是
qto的子对象有什么原因吗?
标签: qt message-queue