2012-04-28 55 views
2

我在对象1上有一个Boost.Signals2信号,并在对象2上连接到它。
如果对象2遭到破坏,信号将不会断开连接,当信号发出时可能会导致不好的事情。
为了解决这个问题,我在对象2上保留scoped_connection。现在的问题是如果对象1与信号一起破坏,然后对象2破坏。
会造成问题吗?有没有更好的方法来解决一般问题? (从对象1 - >对象2有连接,当它们被破坏时它们将断开连接)。Boost.Signals2破坏安全

演示问题A码:

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

这安全吗?

回答

2

检查

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

尤其是部分:

“。然而,与Boost.Signals2一个可跟踪的任何物体,其是通过 一个shared_ptr管理,通过使用时隙::轨道。 当它的任何跟踪对象到期时,一个插槽将自动断开连接。 此外,Boost.Signals2将确保没有跟踪对象在插槽中时到期 与处于执行中的关联。它通过在执行它之前创建临时shared_ptr副本的跟踪对象 来完成 。 “

这是否解决了您的问题?