メインメニューを開く

差分

循環参照

2,289 バイト追加, 2012年6月27日 (水) 06:10
ページの作成:「循環参照(英:circular reference)とは、ある複数のデータが相互に参照しあっている状態のことである。 2つのデータ...」
循環参照(英:circular reference)とは、ある複数の[[データ]]が相互に参照しあっている状態のことである。

2つの[[データ]]が相互に参照するのみならず、何個ものデータが巡り巡って循環しているということも多々ある。

また、[[自己参照]]も循環参照のひとつである。

== 概要 ==
[[プログラミング]]において循環参照を適切に処理できなければ、たとえば[[シリアライズ]]を行うさいに[[永久ループ]]に陥り、[[アウトオブメモリー]](メモリ不足)や[[スタックマシン]]であれば[[スタックオーバーフロー]]が発生したりといったことになる。

また[[参照カウンター]]方式の[[ガベージコレクター]]を採用する[[プログラミング言語]]や[[実行環境]]では、循環参照により[[参照]]しあう[[オブジェクト]]は半永久的に参照カウントが減らないという問題に遭遇し、[[UNIX]]の[[デーモン]]や[[Windowsサービス]]、[[常駐プログラム]]のような長時間起動し続ける[[プログラム]]においてメモリー不足や[[スタックオーバーフロー]]が発生する。

== 循環参照の例 ==
=== スプレッドシートでの循環参照 ===
[[スプレッドシート]]の代名詞である[[Excel]]で以下のような入力を行うと「循環参照に関する警告」というダイアログが表示され怒られる。
{|class="wikitable"
|+
! !! A !! B
|-
! 1 !! =A1 !! =B2
|-
! 2 !! !! =B1
|}

* セルA1は自己参照(=循環参照のひとつ)。
* セルB1はセルB2を参照し、セルB2はセルB1を参照しており、永久に参照を繰り返す。

=== C#での循環参照 ===
[[C Sharp|C#]]と[[ASP.NET MVC]]、[[Knockout.JS]]で[[ウェブアプリ]]を書いてるわけだが、循環参照するモデルクラス(オブジェクト)を[[JSON.NET]]で「簡単」に[[シリアライズ]]する方法を模索中。いまのところ解決方法が思いつかない。

== 関連項目 ==
* [[永久ループ]]
* [[スタックオーバーフロー]]
* [[参照カウンター]]
* [[再帰]]

== 参考文献 ==
<references/>

== 外部リンク ==

{{stub}}
匿名利用者