1

我的程序似乎没有泄漏,所以我对此很好奇。如果我用 new 初始化了一个子类 QObject 并且我没有给该对象一个父对象,那么它什么时候被销毁?它似乎违背了 C++ 的规范,但也许 qt 元编译器正在幕后做一些事情。

更具体地说,我正在使用 QThread 并在没有父对象的对象上使用 moveToThread(线程的含义强制没有父对象)。当主程序完成时,线程下的对象似乎被破坏了。

4

2 回答 2

1

没有生命周期管理的动态分配数据将“存活”,直到应用程序终止。

如果您担心您的工作对象泄漏,您可以deleteLater()在他们的工作完成后调用它们,并且由于它是一个插槽,您也可以将信号连接到它。

于 2013-04-15T02:38:10.433 回答
1

好吧,我会以不同的方式回答。您不应该将 Qt 视为改变您一般 C++ 设计概念的魔术工具。实际上,它可以处理作为任何其他 QObject 的子级的 QObject,并且它们的生存时间仅限于父母的生存时间。但一般来说,由开发人员决定 C++ 对象何时创建以及它们何时死亡。在应用程序退出时,所有 QObjects 都会在某个时候死掉这一事实是非常糟糕的做法。具有大量 QObject 的复杂应用程序在填充一定数量的 QObject 后可能会受到严重的性能影响。

回答您的问题,任何现代操作系统都会在退出后立即删除特定进程的所有分配区域。但是在应用程序中存在您不控制您创建的对象的路径无论如何都会给您带来麻烦。

于 2013-04-15T15:08:33.443 回答