弱い参照
弱い参照(英: weak reference、ウィークリファレンス)あるいは弱参照とは、参照先のオブジェクトをガベージコレクタから守ることのできない参照のことである。弱い参照からのみによって参照されるオブジェクトは到達不可能とみなされ、従っていつでも解放することができる。弱い参照は、通常の参照(強い参照、強参照)による諸問題を解決するために用いられる。PythonやJavaをはじめとするガベージコレクタを実装したオブジェクト指向プログラミング言語の多くは、弱い参照を実装している。
弱い参照のうち、さらに複数の強度を持つ言語もある。例えば、Javaにはjava.lang.refパッケージにて、弱い参照WeakReference、ファントム参照(英語版)PhantomReference、ソフト参照(英語版)SoftReferenceが定義されている。また、WeakReferenceによるハッシュテーブルとしてjava.util.WeakHashMapが定義されている。
C++のように、元々ガベージコレクタのない言語で、その代替機能をライブラリでサポートし、その中で弱い参照・強い参照の機能を提供しているものもある。例えば参照カウント方式のスマートポインタを実現するC++のクラステンプレートとして、Boost C++ライブラリのboost::shared_ptrやC++11以降のstd::shared_ptrが存在するが、これらは「強い参照」に該当する。対応する「弱い参照」は、それぞれboost::weak_ptrとstd::weak_ptrである。通常の(言語組み込みの)ポインタは参照の数に影響しないと言う意味で「弱い参照」と考えることもできるが、弱い参照はオブジェクトが到達不可能になったことを知っているべきなので、ポインタは本当の意味での弱い参照ではない。