2009-01-05

C# memory copy

之前在將義崧的c# code轉成c++時遇到了bug,
剛剛拜見了google大神後,整理一下觀念。

c# 的 memory copy method 有三種常見的方式: Copy, CopyTo, Clone.
而觀念主要分為兩大類,一類為 deep copy,一類為shallow copy。
c# 的陣列或物件預設通通是「reference type」,
所謂的 deep copy,就是重製了一個新的物件,然後將值通通搬過去。
shallow copy則是建立一個新的reference,但指向的還是原本的物件實體。

http://www.discussweb.com/c-programming/966-copyto-clone.html

這條thread講的東西便大有問題!
其實是因為 MSDN 上的定義有講跟沒講一樣:

Copy 將一個 Array 中某範圍的元素複製到另一個 Array,並在必要時執行型別轉
換和 Boxing。
CopyTo 將目前一維 Array 的所有元素複製到指定的一維 Array。
Clone 建立 Array 的表層複本 (Shallow Copy)。

可是事實上 ...下面這篇才是對的。
http://www.geekinterview.com/question_details/5653

做個總結:CopyTo, Clone是shallow copy,Copy是deep copy。

From showmin.

(繼續閱讀...)