2020 12 28 物件拷貝之拷貝建構函式

2021-10-13 07:23:08 字數 1312 閱讀 2746

物件物件

物件陣列a

object1

object2

object3

陣列bobject1

object2

object3

object4

......

例如:

隨著工程發生變化,長度為3的陣列a可能不夠用了。

此時需要乙個更大的陣列來存放更多的內容,但是需要把原來的資料複製到新的更大的陣列中。

如果是c語言,通常使用函式進行記憶體拷貝,那麼在c++中也是做一樣的工作,只不過在c++中它有自己的名稱。

c++允許我們使用更簡單的方法來進行記憶體的複製,這就是物件拷貝。

class myobject

myobject(int x, int y)

};

#include class myobject

myobject(int x, int y)

};int main()

注意:

由於編譯器提供的拷貝建構函式只原封不動的複製物件成員的值,並不複製指標成員指向的記憶體裡面的資料。

當物件成員中含有指標時,最好不要使用,而是自己實現乙個拷貝建構函式,以免被拷貝的物件銷毀後指標失效。

編譯器提供的拷貝建構函式我們可以稱為淺拷貝。

當能拷貝物件中成員的值且將指標成員指向的記憶體複製並申請新的記憶體去存放,我們可以稱為深拷貝。

#include class myobject

myobject(const char* str)

//自定義拷貝建構函式、深拷貝

myobject(const myobject& obj)

~myobject()

};int main()

注意:

自定義拷貝構造函式引數一定需要是當前物件引用型別,如果修改為其他型別,不會進行真正的拷貝,哪怕修改為指標型別。

如果不需要深拷貝,就不要新增拷貝建構函式。

如果新增了拷貝建構函式,那麼編譯器將不會提供,所有的事情都需要自己的拷貝建構函式完成。

如果當前類沒有父類,則按上面的例子來使用即可。如果擁有父類,那麼需要呼叫父類的拷貝建構函式,如下:

class base

class myobject:public base

};

myobject (const myobject& obj):base(obj)

五 物件拷貝

為什麼要使用轉殖 想要處理某個物件,又想將該物件的資料保留下來用於接下來的處理,就需要用到轉殖 clone方法為native方法,產生物件的效率更高 轉殖針對的是物件,而不是類 如何實現轉殖 實現cloneable介面,重寫clone方法 序列化和反序列化 深拷貝和淺拷貝的區別是什麼 深拷貝不但可以...

6 1 物件拷貝

基礎語法 extend deep target,object1,objectn 1.deep true是深拷貝 預設false 淺拷貝 2.target 要拷貝的目標物件 3.object1 待拷貝的 第乙個物件 4.objectn 待拷貝的 第n個物件 一 深拷貝 深度拷貝 完全轉殖 是兩個不同的...

es6 物件深拷貝和淺拷貝

簡介 在專案中,為了不影響原有資料,在運算元據時,經常需要深拷貝乙個物件,在開發過程中,實踐得出。const object1 const object2 object.assign object1 console.log object2 object 這是淺拷貝,返回的不是乙個新物件,而是把乙個或多...