前端的深拷貝和淺拷貝 深拷貝與淺拷貝到底是什麼

2021-10-14 01:21:05 字數 1067 閱讀 9113

複製建構函式也叫拷貝建構函式;

淺複製也叫淺拷貝或位拷貝;

深複製也叫深拷貝;

淺拷貝和深拷貝拷貝就是複製,建立副本。假設有物件a,a有屬性t1,t2。那麼,我通過拷貝a,得到b,b應該也有屬性t1,t2,且a、b兩個物件的每個屬性,都應該是相同的。對於基本型別的屬性t1,拷貝是沒有疑義的。簡單將值複製乙份,就達到了拷貝的效果。而對於引用型別的屬性t2來說,拷貝就有了兩層含義。第一層是,我只是將t2引用的位址複製乙份給b的t2,確實達到了屬性相同的效果,可以理解為實現了拷貝,但是事實上,兩個物件中的屬性t2對應的是同乙個物件。在b物件上對t2所指向的物件進行操作,就會影響到a物件中的t2的值。第二層是,我將a的t2所指向的物件,假設為o1,完整複製乙份,假設為o2,將新的o2的位址給b的t2。也達到了複製的效果,且對b的t2所指向的o2進行操作,不會影響到a的t2所指向的o1。拷貝的兩層含義,對應了淺拷貝和深拷貝的概念,做了第一層,就是淺拷貝,做到第二層,就是深拷貝。

基於以上內容,很容易可以想到,淺拷貝比深拷貝要更快,但是,從拷貝的意義上來看,淺拷貝相較於深拷貝,要欠缺一點。

例項如下

#include using namespace std;

class copydemo

//沒寫,c++會自動幫忙寫乙個複製建構函式,淺拷貝只複製指標,如下注釋部分

//copydemo(copydemo& obj)

//copydemo(copydemo& obj) //一般資料成員有指標要自己寫複製建構函式,如下

~copydemo() //析構函式

public:

int a; //定義乙個整型的資料成員

char *str; //字串指標

};int main()

{ copydemo a(100,"hello!!!");

copydemo b = a; //複製建構函式,把a的10和hello!!!複製給b

cout <

前端的深拷貝和淺拷貝 深拷貝與淺拷貝的區別

淺拷貝的方式 淺拷貝1 var obj var newobj obj newobj.name 李四 console.log obj console.log newobj 淺拷貝2 object.assgin 引數1 目標物件 引數2 任意多個物件 如果物件是多層的話 var obj var obj1...

前端深拷貝與淺拷貝

前端深拷貝與淺拷貝 1.淺拷貝 var obj1 var obj2 obj1 obj2.a 5 console.log obj1.a 5 console.log obj2.a 52.深拷貝 只能拷貝一層 var obj1 var obj2 object.assign obj1 obj2.c 1 5 ...

「淺拷貝」與「深拷貝」

c 中物件的複製就如同 轉殖 用乙個已有的物件快速地複製出多個完全相同的物件。一般而言,以下三種情況都會使用到物件的複製 1 建立乙個新物件,並用另乙個同類的已有物件對新物件進行初始化,例如 cpp view plain copy class rect rect rect1 rect rect2 r...