私は ACE フレームワークを使用していますが、それを参照せずに問題を説明しようと思います。
イベント ハンドラー (ACE_Event_Handler から派生したクラス) があります。イベント ハンドラーへの参照は、shared_ptr のマップ内の一部のマネージャー クラスによって保持されます。
ある時点で私はしたい:
- マネージャー マップからイベント ハンドラーを削除する
- イベント ハンドラのいくつかのメソッドは、イベント ハンドラへの行ポインタを保持する 3 番目のクラスによって呼び出される必要があります (ACE に精通している場合は、ACE Reactor によって呼び出される handle_close() です)。
問題は、順序 (1) と (2) が約束されていないことです。(1) が (2) の前に呼び出された場合、(2) はダングリング イベント ハンドラーで動作します。
そのため、(2) でデクリメントされるイベント ハンドラーへの参照を追加することを考えました。
それはどのように行うことができますか?イベント ハンドラへの参照をイベント ハンドラ自体から維持できますか (おそらく enable_shared_from_this を使用)。
ありがとう