WeakReferenceとは? わかりやすく解説

WeakReference クラス

"弱い参照" を表します弱い参照は、オブジェクトガベージ コレクション対象になっている状態のままで、そのオブジェクト参照します。

名前空間: System
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class WeakReference
    Implements ISerializable
Dim instance As WeakReference
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public class WeakReference : ISerializable
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public ref class WeakReference : ISerializable
/** @attribute SerializableAttribute() */ 
/** @attribute ComVisibleAttribute(true) */ 
public class WeakReference implements ISerializable
SerializableAttribute 
ComVisibleAttribute(true) 
public class WeakReference implements ISerializable
解説解説

共通言語ランタイムガベージ コレクション機構は、アクセスできないオブジェクトメモリからクリアます。オブジェクト参照null 参照 (Visual Basic では Nothing) に設定され場合など、直接、間接を問わずオブジェクトへのすべての参照無効になると、そのオブジェクトにはアクセスできなくなりますアクセス可能なオブジェクトへの参照は、"強い参照" と呼ばれます

弱い参照でも、アクセス可能なオブジェクト参照します。このようなオブジェクトターゲット呼ばれますユーザーターゲットへの強い参照作成するには、Target プロパティの値を変数割り当てます。ただし、強い参照参照されないターゲットは、弱い参照参照されていてもガベージ コレクション対象なります

オブジェクトガベージ コレクション対象になる時点と、このオブジェクト収集される時点との間に遅延生じることがありますターゲット収集後に、ユーザーがそのターゲット取得しようとした場合null 参照だけが取得されます。ターゲットがまだ収集されていない場合には、有効な参照取得できます

Finalize メソッド存在し、さらにこのメソッド呼び出すように指示されている場合には、ガベージ コレクションは、オブジェクトに対してこのメソッド呼び出します。つまり、終了処理が実行されます。終了処理が完了した後に、ユーザー現在の WeakReference オブジェクトの IsAlive プロパティまたは Target プロパティ使用してオブジェクトアクセスようとすると、InvalidOperationException がスローさます。

用語
パフォーマンスに関する考慮事項
.NET Framework のセキュリティ.NET Frameworkセキュリティ
継承階層継承階層
System.Object
  System.WeakReference
スレッド セーフスレッド セーフ
この型の public static (Visual Basic では Shared) メンバはすべて、スレッド セーフです。インスタンス メンバ場合は、スレッド セーフであるとは限りません。
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照

WeakReference コンストラクタ (Object, Boolean)

指定したオブジェクト参照し指定した再生処理追跡使用する WeakReference クラス新しインスタンス初期化します。

名前空間: System
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

Public Sub New ( _
    target As Object, _
    trackResurrection As Boolean _
)
Dim target As Object
Dim trackResurrection As Boolean

Dim instance As New WeakReference(target,
 trackResurrection)
public WeakReference (
    Object target,
    bool trackResurrection
)
public:
WeakReference (
    Object^ target, 
    bool trackResurrection
)
public WeakReference (
    Object target, 
    boolean trackResurrection
)
public function WeakReference (
    target : Object, 
    trackResurrection : boolean
)

パラメータ

target

追跡するオブジェクト

trackResurrection

オブジェクト追跡停止時期を示しますtrue設定すると、終了後オブジェクト追跡されます。false設定すると、オブジェクト追跡終了実行される時点停止します

解説解説

trackResurrectionfalse場合は短い弱い参照作成されます。trackResurrectiontrue場合長い弱い参照作成されます。通常、短い弱い参照だけが必要です。

プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照

WeakReference コンストラクタ


WeakReference コンストラクタ (SerializationInfo, StreamingContext)

指定したシリアル化およびストリーム オブジェクトからの逆シリアル化されたデータ使用してWeakReference クラス新しインスタンス初期化します。

名前空間: System
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
Dim info As SerializationInfo
Dim context As StreamingContext

Dim instance As New WeakReference(info,
 context)
protected WeakReference (
    SerializationInfo info,
    StreamingContext context
)
protected:
WeakReference (
    SerializationInfo^ info, 
    StreamingContext context
)
protected WeakReference (
    SerializationInfo info, 
    StreamingContext context
)
protected function WeakReference (
    info : SerializationInfo, 
    context : StreamingContext
)

パラメータ

info

現在の WeakReference オブジェクトシリアル化または逆シリアル化必要なすべてのデータ保持するオブジェクト

context

(予約済み) info によって指定されシリアル化ストリーム転送元と転送先の説明

例外例外
例外種類条件

ArgumentNullException

infonull 参照 (Visual Basic では Nothing) です。

解説解説

context パラメータ予約されているため、この操作では使用されません。

プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照

WeakReference コンストラクタ (Object)

指定したオブジェクト参照する、WeakReference クラス新しインスタンス初期化します。

名前空間: System
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

解説解説
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照

WeakReference プロパティ


WeakReference メソッド


WeakReference メンバ

"弱い参照" を表します弱い参照は、オブジェクトガベージ コレクション対象になっている状態のままで、そのオブジェクト参照します。

WeakReference データ型公開されるメンバを以下の表に示します


パブリック コンストラクタパブリック コンストラクタ
プロテクト コンストラクタプロテクト コンストラクタ
パブリック プロパティパブリック プロパティ
  名前 説明
パブリック プロパティ TrackResurrection 現在の WeakReference オブジェクト参照するオブジェクトを、その終了後追跡するかどうかを示す値を取得します
パブリック メソッドパブリック メソッド
プロテクト メソッドプロテクト メソッド
参照参照

関連項目

WeakReference クラス
System 名前空間
GC クラス

弱い参照

(WeakReference から転送)

出典: フリー百科事典『ウィキペディア(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]。この追跡リストは、対象オブジェクトに対して弱い参照で参照しなければならない(弱いコレクション)。そうしなければ、一度リストに加えられたオブジェクトはリストによって参照されるため、プログラムが停止するまで半永久的に解放されることはない。

脚注

関連項目



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

辞書ショートカット

すべての辞書の索引

「WeakReference」の関連用語

WeakReferenceのお隣キーワード
検索ランキング

   

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



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

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2025 Microsoft.All rights reserved.
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアの弱い参照 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2025 GRAS Group, Inc.RSS