5

効果的な最新の C++ (136 ページ) では、次の例を使用してstd::weak_ptr. キャッシュは、オブジェクトへの弱いポインターを値として持つ順序付けられていないマップとして定義されます。このキャッシュのクライアントが (キーによって) オブジェクトを要求するたびに、対応するウィーク ポインターが検索さlock()れ、それに対して呼び出されます。結果std::shared_ptrが でない場合はnull、それが返されます。それ以外の場合、オブジェクトは外部データベースから再ロードされ、キャッシュに入力されてstd::shared_ptr返されます。

ここで質問: を使用せずにこれを実装することは可能であると考えるかもしれませんがstd::weak_ptr、代わりに強力な共有ポインターをキャッシュ値として格納します。use_count()強いポインタの が 1 に等しい場合、それはすべてのクライアントのポインタが破棄されたことを意味します。この例の要点は、std::weak_ptr実際にオブジェクトを削除することでメモリを節約できるということでしょうか?

4

1 に答える 1