boost::signal
的 disconnect()
方法需要传入一个函数指针,而直接调用 boost::signals::connection
对象上的 disconnect()
方法则略去该参数。
除了 disconnect()
方法之外, 还提供了其它方法,如 block()
和 unblock()
。
除了 boost::signals::connection
以外,还有一个名为 boost::signals::scoped_connection
的类,它会在析构时自动释放连接。
因为连接对象 c 在信号触发之前被销毁,所以 不会被调用。
虽然 boost::signals::scoped_connection
的确令自动释放连接更为容易,但是该类型的对象仍需要管理。 如果在其它情形下连接也可以被自动释放,而且不需要管理这些对象的话,就更好了。
以上程序使用 Boost.Bind 将一个对象的方法关联至一个信号。 在信号触发之前,这个对象就被销毁了,这会产生问题。 我们不传递实际的对象 w,而只传递一个指针给 boost::bind()
。 在 s()
被实际调用的时候,该指针所引向的对象已不再存在。
如果现在再执行,num_slots()
会返回 0
以确保不会试图调用已销毁对象之上的方法。 仅需的修改是让 world
类继承自 。 当使用对象的指针而不是对象的副本来关联函数至信号时,boost::signals::trackable
可以显著简化连接的管理。