淺層複製和深層複製

2021-08-17 21:46:46 字數 1079 閱讀 9068

淺層複製:

深層複製:

物件的淺層複製:

class point

point(int x, int y): x(x), y(y) {}

int getx()

int gety()

void move(int t, int q)

private:

int x, y;

};class pts //point類的動態陣列(封裝成了類)

由上圖可知,上面的程式會在最後析構時re,因為複製動態陣列時,只是將指標複製了,並沒有多出來乙個陣列,從而析構時會對同乙個記憶體析構兩次導致出錯

物件的深層複製:

#include #include using namespace std;

class point

point(int x, int y): x(x), y(y) {}

int getx()

int gety()

void move(int t, int q)

private:

int x, y;

};class pts //point類的動態陣列(封裝成了類)

pts(const pts &b) //手寫複製函式,多申請乙個陣列,這也是和上面程式唯一的區別

正確

深層複製與淺層複製

複製物件時需要複製建構函式 預設的複製建構函式實現的是物件的資料成員之間一一對應的這種複製,這種複製被稱為淺層複製。淺層複製 實現物件間資料元素的一一對應複製。使用預設拷貝建構函式複製物件時,實際上是將新建立的物件的指標指向被複製的物件指向的記憶體單元,即兩個物件指向同一塊記憶體單元。深層複製 可使...

C 淺層複製建構函式和深層複製建構函式

淺層複製建構函式 class person person person one 自定義淺層複製建構函式,就是複製乙個物件,說到底,就是複製傳進來的物件的所有成員變數,實際上,系統的預設淺層複製建構函式也是類似這樣的原理 person void setheight int h int getheigh...

c 一般指標的深層複製和淺層複製 1

如下 int first int second first new int 5 second first 此時,first和second指標指向同乙個位址,都指向first所在的位址 如果此時執行如下語句,delete second 那麼first和second所指向的陣列被刪除 因為共用乙個位址 ...