2012-04-28 22 views
2

オブジェクト1にBoost.Signals2信号があり、オブジェクト2に接続しています。
オブジェクト2が破壊された場合、シグナルが切断され、シグナルが送信されたときに悪いものにつながる可能性があります。
これを解決するには、オブジェクト2にscoped_connectionを残しておきます。オブジェクト1がシグナルで破壊され、オブジェクト2が破壊された場合の問題は今のところです。
問題が発生しますか?一般的な問題を解決する良い方法はありますか? (オブジェクト1からオブジェクト2への接続を持っていて、それらがオンになったときに切断されます)。Boost.Signals2破壊安全

問題を示すコード:

auto sig = new signal<void()>(); 
auto conn = new scoped_connection(sig.connect(&some_function)); 
delete sig; 
delete conn; 

は、この安全ですか?

答えて

2

チェック

http://www.boost.org/doc/libs/1_55_0/doc/html/signals2/tutorial.html#signals2.tutorial.connection-management

特に部:一つは スロットを使用して、のshared_ptrによって管理される任意のオブジェクトを追跡することができるBoost.Signals2としかしながら

」::トラック に加えて、Boost.Signals2は、追跡されたオブジェクトが期限切れになることを確実にします。 は、実行中の中に関連付けられています。 を実行する前に、スロットの追跡対象オブジェクト の一時的なshared_ptrコピーを作成して、 を作成します。 「

これはあなたの問題を解決していますか?

関連する問題