当删除其中一个对象时,Qt 中的信号是否会自动断开?

问题描述 投票:0回答:1

当对象之一被删除时,Qt 是否会自动删除对象之间的连接?

例如与

connect(A, ..., B, ...)
一样,当删除
A
B
指向的对象时,连接会断开吗?

或者是否有必要在析构函数中显式使用

disconnect

qt destructor qt-signals
1个回答
59
投票

是的,

QObject::~QObject
析构函数负责处理这个问题:

传入和传出该对象的所有信号都会自动断开,并且该对象的任何挂起的已发布事件都会从事件队列中删除。
然而,使用

deleteLater()
通常比直接删除 QObject 子类更安全。

不过要小心:

警告: 在待处理事件等待传递时删除 QObject 可能会导致崩溃。如果 QObject 存在于与当前正在执行的线程不同的线程中,则不得直接删除该 QObject。请改用deleteLater(),这将导致事件循环在所有待处理事件传递给对象后删除该对象。

© www.soinside.com 2019 - 2024. All rights reserved.