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