#include#includeusing namespace std;
class string
else
}/* //淺拷貝 也就是系統預設的拷貝,可寫可不寫。
string (const string &s)//預設的拷貝構造
*///深拷貝
string (const string &s)//string s2(s1);
//深賦值
string& operator=(const string &s)// string s3; s3=s2;
return *this;
} ~string()
private:
char *data;
};void main()
淺拷貝:只拷貝了指標的指向,會造成同乙個空間會被釋放多次。
深拷貝:不僅拷貝指向並且拷貝空間。
一般深賦值函式語句的編寫四步驟:
1-判斷是否給自身賦值;
2-釋放原有空間,並置空;
3-開闢空間,進行拷貝賦值;
4-返回*this
這只適合入門編寫深賦值語句的玩家,對於更高階的程式設計來說,要考慮到開闢空間是否成功,若不成功則會使賦值失敗。
何時該編寫拷貝賦值語句:
只要類裡面存在以指標型別存在的成員物件時,我們就要重新編寫,不能使用系統自帶預設函式。
賦值 淺拷貝 深拷貝
堆是動態分配記憶體,記憶體大小不一 棧是自動分配相對固定大小的記憶體空間,並由系統自動釋放 基本資料型別值是不可變的,比較是值的比較 基本資料型別,傳值。開闢乙個新的記憶體空間 js 基本資料型別,儲存在 棧 中,記憶體可以及時 引用型別值是可變的,比較是引用的比較,看其引用是否指向同乙個物件 引用...
深拷貝 淺拷貝 賦值
賦值 class teacher class student student s1 new student student s2 s1 s1 s2,指向的記憶體區域相同 拷貝 class teacher class student implement cloneable student s1 new...
賦值 淺拷貝 深拷貝
什麼是深拷貝 使用json.parse json.stringify 是深拷貝 原理是josn物件中的stringify可以把乙個js物件序列化為乙個json字串,parse可以把json字串反序列化為乙個js物件,通過這兩個方法,也可以實現物件的深複製。但是這個方法不能夠拷貝函式。缺點 1 如果物...