我在对象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;
这样安全吗?
答案 0 :(得分:2)
检查
特别是部分:
&#34;但是,使用Boost.Signals2,可以跟踪任何对象 由shared_ptr管理,使用slot :: track。一个插槽会 当其任何跟踪对象过期时自动断开连接。在 此外,Boost.Signals2将确保没有被跟踪的对象过期 与它相关联的插槽处于执行中。它就是这样 通过创建插槽的跟踪对象的临时shared_ptr副本 在执行之前。 &#34;
这会解决您的问题吗?