弱参照 | Programming Place Plus 用語集

トップページ用語集

名称 🔗

解説 🔗

ガーベジコレクション参照カウント方式のメモリ管理において、管理対象のオブジェクトを参照しているが、そのオブジェクトのライフサイクルには影響を与えないリファレンスのことです。

参照カウント方式のメモリ管理では、オブジェクトがあらたに参照されると +1(インクリメント)、参照されなくなると -1(デクリメント)されるカウンタを持ち、カウンタが 0 になったらオブジェクトを解放します。通常、この仕組みで正しく管理できますが、オブジェクト同士が互いを参照しあう循環参照があると、カウンタが 0 にならず、オブジェクトが解放されない問題が発生します。この問題を解決する手段として、弱参照によって参照される場合には、カウンタを増減させないようにします。

また、参照カウント方式を取らないトレーシングガーベジコレクションの場合、弱参照は、オブジェクトが到達可能であるかどうかの判定に影響を与えないものとして扱われます。つまり、弱参照だけで参照されているオブジェクトは、ガーベジコレクタによって解放される可能性があります。

なお、弱参照に対して、オブジェクトのライフサイクルに影響を与える通常の参照を強参照と呼ぶことがあります。

C++ の場合 🔗

C++ の標準にはガーベジコレクションの機能はありませんが、標準ライブラリには、スマートポインタによるメモリ管理の仕組みが提供されています。そのうち、std::shared_ptr を使う方法は参照カウント方式に基づいており、循環参照の問題が発生する可能性があります。そこで、std::shared_ptr における弱参照の仕組みとして、std::weak_ptr が提供されています。

std::weak_ptr は、std::shared_ptr によって管理されているオブジェクトを参照できますが、参照カウンタを増減させないため、循環参照の問題を回避できます。


参考リンク 🔗

更新履歴 🔗


用語集のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Facebook でシェア X で ポストフォロー
LINE で送る noteで書く rss1.0 取得ボタン RSS
管理者情報 プライバシーポリシー
先頭へ戻る