C 中關於淺拷貝及深拷貝的區別

2021-06-21 11:08:01 字數 1026 閱讀 8012

個人認為,淺拷貝與深拷貝都是對動態分配的記憶體而言的,對於靜態分配的記憶體並無影響,比較一下這段**

#includeusing namespace std;

class date

~date()

date(const date& date)

int* getdayptradd()

int* getdayadd()

private:

int *dayptr;

int day;

int size;

};int main()

執行結果如下:

date1:

address of dayptr: 0x315f60

address of day:      0x22fd68

date2:

address of dayptr: 0x315f80

address of day:      0x22fd58

date2(after date2 = date1):

address of dayptr: 0x315f60

address of day:      0x22fd58

date3

address of dayptr: 0x315fa0

address of day:      0x22fd48

address of date1: 0x22fd60

address of date2: 0x22fd50

address of date3: 0x22fd40

可以看出,當例項化date1與date2後,二者動態分配的記憶體位址與靜態分配的記憶體位址是不相同的,當經過淺複製date2 = date1後,datr2動態分配的記憶體位址便指向了date1動態分配的記憶體位址,但其靜態分配的記憶體位址並沒有改變。date3採用的是自定義的建構函式來複製date1的成員,屬於深複製,所以date3自身會重新開闢一段記憶體空間。

另外要注意的是,不管何種複製,例項化後的類的位址並不會改變。

淺拷貝 深拷貝的區別

因為不可變物件只有在修改時才會開闢新空間,所以拷貝也相當於讓多個引用同時引用了乙個資料,所以不可變物件的淺拷貝和賦值沒有區別 import copy a 1 b copy.copy a print id a id b 對不可變物件進行賦值時,物件引用並沒有發生變化,那不可變物件拷貝時會不會相同呢?i...

C 淺拷貝與深拷貝區別

也許會有人這樣解釋c 中淺拷貝與深拷貝區別 淺拷貝是對引用型別拷貝位址,對值型別直接進行拷貝。不能說它完全錯誤,但至少還不夠嚴謹。比如 string 型別咋說?其實,我們可以通過實踐來尋找答案。首先,定義以下型別 int string enum struct class int string 如下 ...

C 淺拷貝與深拷貝區別

也許會有人這樣解釋c 中淺拷貝與深拷貝區別 淺拷貝是對引用型別拷貝位址,對值型別直接進行拷貝。不能說它完全錯誤,但至少還不夠嚴謹。比如 string 型別咋說?其實,我們可以通過實踐來尋找答案。首先,定義以下型別 int string enum struct class int string 如下 ...