[解決済み】std::weak_ptrはどんな時に役に立つの?
2022-03-28 18:47:35
質問
C++11のスマートポインタの勉強を始めたのですが、スマートポインタの便利な使い方がわかりません。
std::weak_ptr
. 誰か教えてください。
std::weak_ptr
は有用/必要ですか?
解決方法は?
良い例としては、キャッシュが挙げられるでしょう。
最近アクセスされたオブジェクトは、メモリ内に残しておきたいので、強力なポインタを保持することになります。定期的にキャッシュをスキャンし、最近アクセスされていないオブジェクトを決定します。これらのオブジェクトはメモリ上に保持する必要がないため、ストロングポインタを削除します。
しかし、そのオブジェクトが使用中で、他のコードがそのオブジェクトへのストロングポインタを保持していたらどうでしょうか?もしキャッシュがそのオブジェクトへの唯一のポインタを取り除いてしまったら、二度とそれを見つけることはできません。そこで、キャッシュはオブジェクトへの弱いポインタを保持し、それがたまたまメモリに残っていた場合に、見つける必要があります。
これはまさに弱ポインタの役割です。弱ポインタは、オブジェクトがまだ残っていればその場所を特定できますが、何も必要としない場合はオブジェクトを残さないのです。
関連
-
[解決済み] C++コンパイラーエラー。"invalid declarator before" (無効な宣言子の前に)
-
C++11学習シリーズ No.3 ----配列/valarray
-
[解決済み] using namespace std;」はなぜバッドプラクティスだと言われるのですか?
-
[解決済み] static_cast, dynamic_cast, const_cast, reinterpret_cast はいつ使うべきですか?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] 仮想デストラクタはいつ使うのか?
-
[解決済み] std::move()とは何ですか?また、どのような場合に使用するのですか?
-
[解決済み】なぜC++プログラマは'new'の使用を最小限に抑えなければならないのでしょうか?
-
[解決済み】どのような時にどのようなポインタを使えばいいのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン