2

オブジェクト 1 に Boost.Signals2 信号があり、オブジェクト 2 に接続します。
オブジェクト 2 が破壊された場合、信号は切断されず、信号が送信されたときに問題が発生する可能性があります。
これを解決するためにscoped_connection、オブジェクト 2 を保持します。問題は、オブジェクト 1 がシグナルで破壊され、次にオブジェクト 2 が破壊された場合です。
それは問題を引き起こしますか?一般的な問題を解決するためのより良い方法はありますか? (オブジェクト 1 -> オブジェクト 2 からの接続があり、そのうちの 1 つが破棄されると切断されます)。

問題を示すコード:

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

これは安全ですか?

4

1 に答える 1

2

小切手

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

特にその部分:

「ただし、Boost.Signals2 を使用すると、slot::track を使用して、shared_ptr によって管理される任意のオブジェクトを追跡できます。スロットは、追跡されたオブジェクトの有効期限が切れると自動的に切断されます。さらに、Boost.Signals2 は、追跡されたオブジェクトがないことを保証します。オブジェクトは、関連付けられているスロットが実行中に期限切れになります。これは、実行前にスロットの追跡オブジェクトの一時的な shared_ptr コピーを作成することによって行われます。"

これで問題は解決しましたか?

于 2014-05-09T11:17:59.440 に答える