有一个QNetworkReply类的对象。有一个插槽(在某些其他对象中)连接至其finish()信号。信号是同步的(默认信号)。只有一个线程。
在某个时刻,我想摆脱两个对象。没有更多信号或来自它们的任何东西。我希望他们走了。好吧,我想,我会用
delete obj1; delete obj2;
但是我真的可以吗?〜QObject的规范说:
在等待事件发送时删除QObject可能导致崩溃。
什么是“待处理事件”?这是否意味着在我打电话给我时delete
,已经有一些“待处理事件”要传递,并且它们可能会导致崩溃,而我真的无法检查是否有任何事件?
假设我打电话给:
obj1->deleteLater(); obj2->deleteLater();
为了安全。
但是,我真的很安全吗?该deleteLater
补充说,将在主回路控制时到达那里进行处理的事件。是否可以存在obj1
或obj2
已经存在一些未决事件(信号),在处理deleteLater之前在主循环中等待处理?那将是非常不幸的。我不想编写代码来检查“某些已删除”状态,而忽略所有插槽中的传入信号。
obj->disconnect(); obj->deleteLater();
是正确的方法: