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

4

1 回答 1

0

它会复制并保留它。

您的 to 的结果boost::bind被起诉以构造 a slot_type,它将其存储为成员,然后将其传递给signal::connect信号后存储,这意味着您的结果slot_type的副本存储在中.bindsignal

我找不到一个地方可以明确明确地说明这一点,但您或多或少可以从以下结论中得出结论:

于 2017-01-11T10:40:47.570 回答