首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Boost.Signals2销毁安全

Boost.Signals2销毁安全
EN

Stack Overflow用户
提问于 2012-04-28 19:07:43
回答 1查看 587关注 0票数 2

我在对象1上有一个Boost.Signals2信号,并且我在对象2上连接到它。

如果对象2被破坏,信号将不会断开连接,这可能会导致在发出信号时出现错误。

为了解决这个问题,我在对象2上保留了一个scoped_connection。现在的问题是,如果对象1使用信号进行析构,然后对象2析构。

会不会有问题?有没有更好的方法来解决这个普遍的问题?(有一个从对象1 ->对象2的连接,当它们中的一个破坏时将断开连接)。

演示该问题的代码:

代码语言:javascript
复制
auto sig = new signal<void ()>();
auto conn = new scoped_connection(sig.connect(&some_function));
delete sig;
delete conn;

这个安全吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-09 19:17:59

检查

http://www.boost.org/doc/libs/1_55_0/doc/html/signals2/tutorial.html#signals2.tutorial.connection-management

尤其是那部分:

“然而,使用Boost.Signals2,人们可以通过使用slot::track来跟踪由shared_ptr管理的任何对象。当任何被跟踪的对象过期时,插槽将自动断开连接。此外,Boost.Signals2将确保在与其关联的插槽处于执行过程中时没有被跟踪的对象过期。它通过在执行之前创建插槽的被跟踪对象的临时shared_ptr副本来实现。”

这解决了你的问题吗?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10362936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档