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