typedef boost::signals2::signal<void ()> signal_t;
class AAA {
public:
void Connect(const signal_t::slot_type& subscriber)
{
return m_sig.connect(subscriber);
}
void FireSignal()
{
m_sig();
}
private:
signal_t sig;
};
// Global
AAA a;
BBB b;
// Some scope
{
...
a.Connect(boost::bind(&BBB:foo, &b));
...
}
以前の boost::bind によって返された一時オブジェクトは範囲外になり、破棄されますが、一時オブジェクトは参照によって AAA::Connect に渡されます。ある時点で、オブジェクト a.FireSignal() が呼び出されたとしましょう。シグナルは、既に破棄されている関数オブジェクトを呼び出しますか? それ以外の場合はどのように機能しますか?