我的程序似乎没有泄漏,所以我很好奇。如果我用new初始化了一个子类QObject,并且我没有给对象一个父对象,它什么时候被销毁?它似乎违反了C ++的规范,但也许qt元编译器可能在幕后做一些事情。
更具体地说,我正在使用QThread并在没有父对象的对象上使用moveToThread(线程的含义不强制父母)。当主程序完成时,线程下的对象似乎被破坏了。
答案 0 :(得分:1)
在没有生命周期管理的情况下动态分配数据将“生效”,直到应用程序终止。
如果您的工作对象泄漏问题,您可以在工作完成后致电deleteLater()
,因为它是一个插槽,您也可以将信号连接到它。
答案 1 :(得分:1)
好吧,我会回答不同的问题。您不应该认为Qt是一个神奇的工具,它会为您改变一般的C ++设计概念。实际上,它可以照顾QObject,它们是任何其他QObject的子节点,并且它们的实时时间仅限于父节点的实时时间。但总的来说,由开发人员决定何时创建C ++对象然后它们就会死掉。事实上,当应用程序退出时,所有QObject都会死掉,这真的是糟糕的实践。在填充了一定数量的QObject之后,具有大量QObject的复杂应用程序可能会遇到严重的性能影响。
回答你的问题,任何现代操作系统都会在退出后立即丢弃特定进程的所有已分配区域。但是在应用程序中有路径,你不能控制你创建的对象,无论如何都会导致你遇到麻烦。