• 5103阅读
  • 7回复

connect(A,SINGAL,B,SLOT);delete(A);后,这个信号槽连接会被清除吗? [复制链接]

上一主题 下一主题
离线iiiyyyhhhsss
 

只看楼主 倒序阅读 楼主  发表于: 2009-11-06
如题....
离线rqzrqh

只看该作者 1楼 发表于: 2009-11-06
你觉得呢?
离线wczt_123
只看该作者 2楼 发表于: 2009-11-06
会的.......................................
离线hiti_tony
只看该作者 3楼 发表于: 2009-11-06
发signal的对象都没有了,本人认为这个连接肯定不会存在了。
离线iiiyyyhhhsss

只看该作者 4楼 发表于: 2009-11-06
关键是我不知道信号槽以什么形式存在

我总觉得,有一种可能是:

对象没有了,只能说明这个信号槽不起作用了,但不一定说明这个信号槽不存在了,
只是没有了实体去触发这个信号槽,而这个信号槽依然存在
离线hiti_tony
只看该作者 5楼 发表于: 2009-11-06
你可以看下qobject::disconnect的说明:
A signal-slot connection is removed when either of the objects involved are destroyed
这里很明了地说了只要其中一个被摧毁,这个连接就被removed
离线dbzhang800

只看该作者 6楼 发表于: 2009-11-06
引用第5楼hiti_tony于2009-11-06 15:24发表的  :
你可以看下qobject::disconnect的说明:
A signal-slot connection is removed when either of the objects involved are destroyed
这里很明了地说了只要其中一个被摧毁,这个连接就被removed

恩,这个就是针对楼主首贴标题疑问句的答案了。

不过尽管楼主首贴只有标题(问句突出了 “连接” 一词)

可是在4楼,文字多了一点,却只字未提 “连接”,却出现了个新名词“信号槽”
离线rqzrqh

只看该作者 7楼 发表于: 2009-11-06
实际上删除的是发送方的信息,既然没有东西可以出发这个连接了,可以认为这个连接已经消失了。生成moc文件的时候固定生成了连接,而代码是不可能会被删掉的,唯一可能修改的是数据。

信号槽比回调函数多出的优点是什么?
“通常,发射一个和槽相连的信号,大约只比直接调用那些非虚函数调用的接收器慢十倍。这是定位连接对象所需的开销,可以安全地重复所有地连接(例如在发射期间检查并发接收器是否被破坏)并且可以按一般的方式安排任何参数”

有兴趣可以去看QObjectPrivate的析构函数对这些数据的处理,这个是楼主希望知道的;
而disconnect和删除对象是不一样的。
快速回复
限100 字节
 
上一个 下一个