【问题标题】:Will the connection be disconnected in Qt automatically?Qt中的连接会自动断开吗?
【发布时间】:2014-11-27 07:50:47
【问题描述】:

从这里的问题:Qt Signals and Slots object disconnect? 如果我首先在 QObject 上调用 delete,那么我会像这样调用断开函数:

MyQClass* A = new MyQClass();
connect(A,SIGNAL(A_S()),this,SLOT(B_S()));
A->deleteLater();
...
disconnect(A,SIGNAL(A_S()),this,SLOT(B_S()));

这会导致崩溃吗?我发现它在 Qt4 下会导致崩溃,但在 Qt5 下不会? 不同的 Qt 版本有什么不同吗?否则,我的代码可能有其他问题。

【问题讨论】:

标签: c++ qt


【解决方案1】:

对象销毁时连接会自动断开。崩溃的发生可能是因为您试图在被破坏的对象上调用断开连接。你得到一个悬空指针 A (有一个不再存在的对象的地址)。但这有点取决于“...”是什么。

【讨论】:

  • 在“...”期间我没有对 A 执行任何操作,并且我确认崩溃是由于 disconnect() 引起的,因为我检查了调用堆栈。您能否详细解释一下“但这有点取决于“...”是什么。”
  • 您可以在此处更改指针 A。或者可能有一些条件。这只是理论上的。此外,您还需要在“...”中返回事件循环以触发 dangling-pointer-bug。
猜你喜欢
  • 1970-01-01
  • 2017-08-13
  • 1970-01-01
  • 1970-01-01
  • 2013-08-02
  • 1970-01-01
  • 2020-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多