我在对象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;这个安全吗?
发布于 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副本来实现。”
这解决了你的问题吗?
https://stackoverflow.com/questions/10362936
复制相似问题