個人認為,淺拷貝與深拷貝都是對動態分配的記憶體而言的,對於靜態分配的記憶體並無影響,比較一下這段**
#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 如下 ...