gpt4 book ai didi

c++ - Boost.Signals2销毁安全

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:55:36 25 4
gpt4 key购买 nike

我在对象 1 上有一个 Boost.Signals2 信号,我在对象 2 上连接到它。
如果对象 2 被破坏,信号将不会断开,这会在它发出信号时导致坏事。
为了解决这个问题,我在对象 2 上保留了一个 scoped_connection。现在的问题是,如果对象 1 用信号破坏然后对象 2 破坏怎么办。
会不会出问题?有没有更好的方法来解决一般问题? (有一个来自对象 1 -> 对象 2 的连接,当它们中的一个被破坏时将断开连接)。

演示问题的代码:

auto sig = new signal<void ()>();
auto conn = new scoped_connection(sig.connect(&some_function));
delete sig;
delete conn;

这样安全吗?

最佳答案

检查

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

特别是部分:

"However, with Boost.Signals2 one may track any object which is managed by a shared_ptr, by using slot::track. A slot will automatically disconnect when any of its tracked objects expire. In addition, Boost.Signals2 will ensure that no tracked object expires while the slot it is associated with is in mid-execution. It does so by creating temporary shared_ptr copies of the slot's tracked objects before executing it. "

这是否解决了您的问题?

关于c++ - Boost.Signals2销毁安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10362936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com