1.淺拷貝:
//淺拷貝
class string
//拷貝構造
string(const string& str)//淺拷貝--s1和s2同時會指向同一塊空間。
2.深拷貝
//傳統寫法
class string
//帶預設引數更好
string(char* str= "")
:_str(new char[strlen(str) + 1])
string(const string& s)
:_str(new char[strlen(s._str) + 1])
string& operator=(const string&s)
return *this;
} ~string() }
private:
char* _str;
};void teststring1()
現**法:
class string
string(const string& s)//拷貝構造
:_str(null)
string& operator=(string s)//注意沒有&,現**法這裡可以建立臨時物件
深淺拷貝問題 拷貝建構函式
深拷貝 在堆區重新申請空間,進行拷貝操作 淺拷貝 簡單的複製拷貝操作 class person person int age person int m age void test 當引數中有堆區引數,改造之後 class person person int age,int height person...
陣列的深淺拷貝問題
陣列的直接賦值屬於陣列的淺拷貝,js 儲存物件都是存記憶體位址的,所以淺拷貝會導致新陣列和舊陣列共用同一塊記憶體位址,其中乙個陣列變化,另乙個陣列也會相應的變化。陣列內部不含有引用型別,使用 slice concat 和 assign 方法都屬於陣列的深拷貝,乙個陣列變化,另乙個陣列不受影響。let...
js深淺拷貝的問題
例 1 let a let b a console.log b.num 1 a.num 2 console.log b.num 2 b.num 3 console.log a.num 3可以看出物件間的賦值會相互影響,因為他們是引用型別,所有的值都存在記憶體的乙個區域裡,物件通過指標指向去呼叫,一旦...