【发布时间】:2012-04-28 14:36:39
【问题描述】:
所以我意识到事实上我真的不需要做我将要解释的事情,但我对确保我的程序在退出之前清理所有内容非常挑剔,所以我仍然想做它...
我有一个 QApplication,我将一个单次计时器连接到退出插槽。 (将来想象这个退出真的会在用户点击时从 UI 生成,所以这只是为了调试)我注意到起初我只是在堆栈的主函数中分配 qApp。问题是在做一些研究时,似乎 exec 函数不必返回。这意味着主函数堆栈不会被清理。 (或者至少在程序退出并且系统回收该内存之前不会......)所以在 valgrind 我有一些 QCoreApplication::init() 内存“问题”。再一次只是我挑剔然后真正影响事情......
无论如何,所以我决定 malloc QApplication,然后尝试在程序关闭之前释放它。我可以对信号执行此操作,但退出信号如何?我与 aboutToQuit 信号有关,但我觉得这不是吹走 qApp 的正确阶段。所以我的问题是,是否有删除 qApp 的正确位置,如果是,在哪里?
【问题讨论】:
-
你不应该删除你的 QApplication(因为它不应该使用
new创建),因此答案是否定的。 -
如果是这种情况,那么如果我不能保证析构函数在堆栈上会被调用,那么 qAddPostRoutine 的意义何在?
-
在 QCoreApplication 文档中,它解释了什么类型的情况使 QApplication::exec 不返回。即使您确实找到了删除 QApplication 的“正确方法”,您也无能为力。将其分配到堆栈上,然后让这些东西自行删除。
-
请注意,析构函数确实会为堆栈上的对象调用。