2

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

演示该问题的代码:

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

这安全吗?

4

1 回答 1

2

查看

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 副本来实现。"

这能解决您的问题吗?

于 2014-05-09T11:17:59.440 回答