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()被调用,信号是否调用已被销毁的函数对象???它是如何工作的呢?
答案 0 :(得分:0)
它会复制它并保留它。
您boost::bind
的结果会被用来构建slot_type
,将其存储为成员,然后一旦传递给signal::connect
,信号就会存储slot_type
,表示bind
结果的副本存储在signal
内,并且是信号触发时使用和调用的副本。
我无法找到一个特定的地方并明确地说,但你可以或多或少地从以下结论: