Boost.Signals2破坏安全

时间:2012-04-28 11:07:43

标签: c++ memory-management boost-signals2

我在对象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;

这样安全吗?

1 个答案:

答案 0 :(得分:2)

检查

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

特别是部分:

  

&#34;但是,使用Boost.Signals2,可以跟踪任何对象   由shared_ptr管理,使用slot :: track。一个插槽会   当其任何跟踪对象过期时自动断开连接。在   此外,Boost.Signals2将确保没有被跟踪的对象过期   与它相关联的插槽处于执行中。它就是这样   通过创建插槽的跟踪对象的临时shared_ptr副本   在执行之前。 &#34;

这会解决您的问题吗?