【发布时间】:2022-01-07 14:15:00
【问题描述】:
我在QThread::finished 的 Qt 5.15 文档中阅读了此内容:
当这个信号发出时,事件循环已经停止运行。除了延迟删除事件外,线程中不会再处理任何事件。该信号可以连接到
QObject::deleteLater(),以释放该线程中的对象。
但是,在文档的another section 中,它说
从拥有该对象(或以其他方式访问该对象)的线程以外的线程对 QObject 调用
delete是不安全的,除非您保证该对象是'此时不处理事件 [强调我的]。
如果我理解正确,在发出QThread::finished 之后,事件循环已经停止运行,并且如果不存在延迟删除事件(即QObject::deleteLater 没有被调用),线程中的所有对象也应该完成处理事件。那么,为什么还要为这些对象使用QObject::deleteLater 而不仅仅是手动删除它们呢?我使用QObject::deleteLater 没有问题;我只是确保我对 Qt 的理解是正确的。
【问题讨论】:
-
您问是因为使用 deleteLater 有问题吗?还是只是为了您的理解?
-
只是我的理解。我本来想把它放在我的帖子里,但我忘记了。我刚刚添加了它。