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() 被调用,信号是否调用了一个已经被销毁的函数对象???不然怎么操作???