やじゅ@アプリケーション・ラボ わんくま支局

目次

Blog 利用状況

ニュース

プロフィール

MSMVP

シャローコピー と ディープコピー

シャローコピー (Shallow Copy) と、ディープコピー (Deep Copy) という言葉を今頃、知りました。仕組みは知っていたけれど・・・

コレクション系クラス(ArryaListなど)をコピーしようとして、

Dim test1 As New ArrayList
Dim test2 As New ArrayList

test1.Add("A")
test1.Add("B")

test2 = test1    'シャローコピー

test1.Add("C")
test2.Remove("A")

とした場合、追加していない test2 にも、"C" が追加され、削除していない
test1 では、"A"が削除されます。

これは、参照先を示すアドレスがコピーされるだけ、コピー元もコピー先も結局は同じものを指し示していることを意味します。

これを、シャローコピー (Shallow Copy、簡易コピー、浅いコピーなど) と言います。


逆に、中身そのものをコピーする(参照先のインスタンスをも複製する)場合をディープコピー (Deep Copy、深いコピーなど) と言います。

Dim test1 As New ArrayList
Dim test2 As ArrayList =  Nothing

test1.Add("A")
test1.Add("B")

test2 = New ArrayList(test1)  'ディープコピー

test1.Add("C")
test2.Remove("A")

とした場合、test1 と test2 は、中身そのものがコピーされるため、それぞれは影響を受けません。test1 のみに"C"が追加され、test2 のみに "A"が削除されます。

投稿日時 : 2008年10月11日 19:50

コメントを追加

No comments posted yet.
タイトル
名前
URL
コメント