(C++ 11を使用し、できれば下位(ブーストまたはTR1)互換のスマートポインタータイプを使用して)達成する方法について疑問に思っています:
1 つのクラス インスタンス ( ModelController) がリソース ( ) を所有し、InputConsumer別のコンポーネント ( InputSender、この場合はシングルトン) がそのリソースにアクセスできます。
モデルはInputSenderへの参照のリストを保持しておりInputConsumers、その中には多くのものがあります。
ModelControllerには、 がまったくないか、1 つまたは多く含まInputConsumersれている可能性があり、 が多数含まれている可能性がありますModelController。はInputSender認識していません。
これが良いことです:個人が有効かどうかを自分で確認できるように、割り当てられたものInputSenderを追跡する方法。InputConsumersInputConsumers
weak_ptrそれらの使用にはこの条件を確認する必要があるため、この目的には完璧だと思います。
InputSenderがその参照のいずれかの追跡を停止した場合weak_ptr、悪いことは何も起こらず、対応するInputConsumerは無線沈黙を経験するだけです。
が削除された場合ModelController、またはがそののModelController一部を削除した場合、それらに登録されている は、次にアクセスしようとしたときに、存在しないことを認識し、メッセージを送信する必要なくクリーンアップできます。または何でもします。InputConsumerInputSender
shared_ptr問題は、これはandを使用するのに適した状況weak_ptrですか? s は概念的に s によって所有されているため、メンバー変数にする必要があるshared_ptrため、完全に適切かどうか疑問に思います。経由でのみ管理することがどれほど意味があるのか わかりません。と一緒に動作するかどうかはわかりません。のctor / dtorでsを管理するだけですか?InputConsumerModelControllerModelControllershared_ptrunique_ptrweak_ptrshared_ptrModelController
また、よく知られた (私にはわからない!) これが当てはまるデザイン パターンがあるかもしれないので、そのようなことを知っている人がいたら教えてください。