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()が呼び出されたとします。シグナルはすでに破棄されている関数オブジェクトを呼び出しますか?どうやってそれは動作するのですか?ブースト信号参照範囲外のオブジェクト?
私が試しを両方とも参照渡しとオブジェクト渡しを使用します。ブースト信号2がクラッシュする!どういうわけか、信号はバインドによって作成された関数オブジェクトを失います。 – Joseph
@Josephあなたが使用しているインスタンス( 'BBB b')はバインド結果自体よりも死んでいる可能性が高く、さらに別の理由があるかもしれません。本当にコンテキストに依存します。 – Drax