弱参照とは? わかりやすく解説

弱い参照

(弱参照 から転送)

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2019/02/10 17:42 UTC 版)

ナビゲーションに移動 検索に移動

弱い参照: weak referenceウィークリファレンス)あるいは弱参照とは、参照先のオブジェクトをガベージコレクタから守ることのできない参照のことである。弱い参照からのみによって参照されるオブジェクトは到達不可能とみなされ、従っていつでも解放することができる。弱い参照は、通常の参照(強い参照、強参照)による諸問題を解決するために用いられる。PythonJavaをはじめとするガベージコレクタを実装したオブジェクト指向プログラミング言語の多くは、弱い参照を実装している。

概要

ガベージコレクタ (GC) はメモリオブジェクトのライフサイクル管理を自動化し、メモリリークを防ぐために用いられる。GCの方式のひとつとして参照カウント方式があり、これはオブジェクトごとに参照の数を記録する領域(参照カウンタ)を用意し、その数が0になった時点でオブジェクトを解放するというものである。この方式のGCは、あるオブジェクト間で参照が循環した場合にそれらを解放することができない(循環参照)。そのため、相互に参照しあったオブジェクト群はメモリリークの原因となる。この問題は、強い参照を弱い参照で置き換えることで解決することが可能な場合がある。一方、マーク・アンド・スイープ方式やコピーGC方式では循環参照によるメモリリークは発生しないが、非意図的オブジェクト保持(unintentional object retention)が引き起こすメモリリークを強参照のみによる実装で解消することは難しく煩雑であり、実装を簡略化するために弱参照が用いられることがある。

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

弱い参照が便利なひとつの例として、アプリケーション内で参照されている変数を追跡するケースがある[1]。この追跡リストは、対象オブジェクトに対して弱い参照で参照しなければならない(弱いコレクション)。そうしなければ、一度リストに加えられたオブジェクトはリストによって参照されるため、プログラムが停止するまで半永久的に解放されることはない。

脚注

関連項目


弱参照

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/12/04 03:18 UTC 版)

Smalltalk」の記事における「弱参照」の解説

弱参照は参照カウント方式使う言語でよくライブラリーとして実装されるがSmalltalkではハンドル制御用いた言語機能として用意されており相互参照しているが不要になっているオブジェクト迅速に解放するために使われている。弱参照には#makeWeakを用い、#makeWeakを受け取ったオブジェクトは弱参照となる。 | holder object |holder := ValueHolder new.holder makeWeak. "holderが弱参照になる。"object := Object new.holder value: object.ObjectMemory compact. "ごみ回収。この時点ではholder valuenilではない。" object := nil. ObjectMemory compact. "ごみ回収。この時点holder valuenilとなる。"

※この「弱参照」の解説は、「Smalltalk」の解説の一部です。
「弱参照」を含む「Smalltalk」の記事については、「Smalltalk」の概要を参照ください。

ウィキペディア小見出し辞書の「弱参照」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「弱参照」の関連用語

弱参照のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



弱参照のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアの弱い参照 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、WikipediaのSmalltalk (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS