C 實現物件的深拷貝與淺拷貝(正確開啟方式)

2021-10-07 14:08:09 字數 691 閱讀 1084

首先吐槽一下部分csdner,不要照抄,要有自己的思想,網上傳的c#四種實現深拷貝的方法都屬於比較偏的方法了,然而c#有內建的實現深拷貝和淺拷貝的方法,大家何必另闢蹊徑,還全部都不加思索的就複製貼上……

1.實現預設的拷貝建構函式(複製建構函式)

這一部分請看官方文件:

例項**非常清楚,相當於顯式的增加乙個帶有類引用的建構函式就可以實現乙個新的物件,並且該物件與原物件值相同,這不就完成了深拷貝嗎。

2.實現icloneable介面(標準做法)

如果要想某個類能夠被深拷貝或者淺拷貝,則實現該介面即可:

public object clone(){}方法即可,返回型別為object型別。根據實現的方法不同從而實現不同的拷貝方式:

如果是return this as object說明是引用同乙個物件,這是一種預設的方法。

如果是return this.memberwiseclone()說明是淺複製(成員逐一複製,意義是值型別則複製乙份新的值型別,而引用型別還是引用原物件,注意跟return this as object區別開)

如果是return new 構造方法 as object則說明是深複製,成員逐一複製而且引用型別也會申請新的記憶體空間新的位址。

js 物件深拷貝 深拷貝與淺拷貝

前言 最近在複習一些面試的知識點,剛剛好複習到了這一部分,於是就寫下這篇文章記錄一下。一 值型別和引用型別 在學習深拷貝和淺拷貝之前,我們先來了解一下js的變數型別。值型別 vs 引用型別 值型別 值型別主要有 number,string,boolean,symbol,null,undefined ...

物件的淺拷貝與深拷貝

工作中可能會遇到這樣乙個問題,我明明把資料拷貝了乙份,但改變拷貝後的資料居然同時會改變原始資料中的值。那就來看看為什麼吧,希望這篇文章可以給你解惑。只拷貝了資料物件的第一層,深層次的資料值與原始資料會互相影響 拷貝後的資料與原始資料還存有關聯 常見淺拷貝的方式 object.assign 擴充套件運...

實現淺拷貝與深拷貝

js包含基本資料型別與引用資料型別兩種不同的資料型別的值,深拷貝與淺拷貝的概念只存在於引用資料型別。對於引用型別,淺拷貝是拷貝了指向這個物件堆記憶體的指標,是拷貝了對原物件引用,深拷貝是拷貝了該物件的所有屬性到乙個新的物件,若是原物件的某屬性依然引用了其他物件,那麼需要將原物件引用的其他物件一併進行...