1. ホーム
  2. c++11

[解決済み】std::weak_ptrはどんな時に役に立つの?

2022-03-28 18:47:35

質問

C++11のスマートポインタの勉強を始めたのですが、スマートポインタの便利な使い方がわかりません。 std::weak_ptr . 誰か教えてください。 std::weak_ptr は有用/必要ですか?

解決方法は?

良い例としては、キャッシュが挙げられるでしょう。

最近アクセスされたオブジェクトは、メモリ内に残しておきたいので、強力なポインタを保持することになります。定期的にキャッシュをスキャンし、最近アクセスされていないオブジェクトを決定します。これらのオブジェクトはメモリ上に保持する必要がないため、ストロングポインタを削除します。

しかし、そのオブジェクトが使用中で、他のコードがそのオブジェクトへのストロングポインタを保持していたらどうでしょうか?もしキャッシュがそのオブジェクトへの唯一のポインタを取り除いてしまったら、二度とそれを見つけることはできません。そこで、キャッシュはオブジェクトへの弱いポインタを保持し、それがたまたまメモリに残っていた場合に、見つける必要があります。

これはまさに弱ポインタの役割です。弱ポインタは、オブジェクトがまだ残っていればその場所を特定できますが、何も必要としない場合はオブジェクトを残さないのです。