ガベージコレクションのようなメモリ管理の仕組みにおいて、管理対象のオブジェクトを参照しているが、そのオブジェクトのライフサイクルには影響を与えないリファレンスのことです。
参照カウント方式のメモリ管理では、オブジェクトがあらたに参照されると +1(インクリメント)、参照されなくなると -1(デクリメント)されるカウンタを持ち、カウンタが 0 になったらオブジェクトを解放します。通常、この仕組みで正しく管理できますが、オブジェクト同士が互いを参照しあう循環参照があると、カウンタが 0 にならず、オブジェクトが解放されない問題が発生します。この問題を解決する手段として、弱参照によって参照される場合には、カウンタを増減させないようにします。
なお、弱参照に対して、参照カウンタを増減させる通常の参照を、強参照と呼ぶことがあります。
C++ の標準にはガベージコレクションの機能はありませんが、標準ライブラリには、スマートポインタによるメモリ管理の仕組みが提供されています。そのうち、std::shared_ptr を使う方法は参照カウント方式に基づいており、循環参照の問題が発生する可能性があります。そこで、std::shared_ptr における弱参照の仕組みとして、std::weak_ptr が提供されています。
std::weak_ptr は、std::shared_ptr によって管理されているオブジェクトを参照できますが、参照カウンタを増減させないため、循環参照の問題を回避できます。
Programming Place Plus のトップページへ
| はてなブックマーク に保存 | Facebook でシェア | X で ポスト/フォロー |
| LINE で送る | noteで書く |
|
| 管理者情報 | プライバシーポリシー |