C 中淺拷貝與深拷貝的詳解及其作用介紹

2022-09-25 03:51:08 字數 1443 閱讀 6247

目錄

淺拷貝 (shallow copy) 只是對指標的拷貝, 拷貝夠兩個指標指向同乙個記憶體空間. 深拷貝 (deep copy) 不但對指標進行拷貝, 而且對指標指向的內容進行拷貝. 經過深拷貝後的指標是指向兩個不同位址的指標.

同類物件之間可以相互賦值. 物件賦值的一般形式:

物件名1 = 物件名2;

舉個栗子:

inzmgrjjfft main()

實現原理: 賦值運算子的過載.

物件的複製即用已有的物件轉殖出乙個新物件. 物件複製的一般格式:

類名 物件2(物件1);

舉個栗子:

int main()

int main()

原理: 編譯系統預設提供的預設複製建構函式. 如:

time::time(const time& t)

我們可以利用複製建構函式進行初始化而建立乙個新物件.

time t2(t1);

通過呼叫複製的建構函式來建立乙個實參的拷貝, 在呼叫函式時我們可以將實參物件完整的傳遞給形參. 例如:

voi程式設計客棧d fun(time time);

using namespace std;

int main()

void fun(time time)

zmgrjjff

當函式呼叫完畢, 我們需要通過呼叫複製的建構函式將函式中的物件複製乙個臨時的物件並返回. 例如:

time fun();

using namespace std;

int main()

time fun()

淺拷貝 (shallow copy) 只複製某個物件的指標, 而不複製物件本身, 新舊物件還是共享同一塊記憶體.

test 類:

#ifndef project2_test_h

#define project2_test_h

class test ;

#endif //project2_test_h

test.cpp:

#include

#include "test.h"

using namespace std;

test::test(int n) : x(n){}

void test::show()

main:

#include "test.h"

#include

using namespace std;

int main()

輸出結果:55

深拷貝 (deep copy) 在拷貝的過程中會另外創造乙個一模一樣的物件. 新物件跟原物件不共享記憶體, 修改新物件不會改到原物件. 例如:

#include "test.h"

#include

using namespace std;

int main()

輸出結果:

5

c 中的 深拷貝 與 淺拷貝 詳解

在c 中,深拷貝和淺拷貝也算是乙個難點,特別是對於初學者來說,往往在不知道兩者區別的情況下而錯誤的使用了淺拷貝,從而導致了野指標之類的問題,但是又因為缺少理解所以很難定位到問題所在。深拷貝和淺拷貝最根本的區別在於是否真正獲取乙個物件的完全複製實體,而不是引用。所謂完全複製實體即是在包含指標變數的時候...

C 深拷貝與淺拷貝 詳解

include using namespace std class test test test int p,int n test test void test show int main void test a b,88 a.show 上面的拷貝建構函式不夠正規,現在寫乙個常用的拷貝建構函式 in...

c 中深拷貝與淺拷貝

如果沒有自定義複製建構函式,則系統會建立預設的複製建構函式,但系統建立的預設複製建構函式只會執行 淺拷貝 即將被拷貝物件的資料成員的值一一賦值給新建立的物件,若該類的資料成員中有指標成員,則會使得新的物件的指標所指向的位址與被拷貝物件的指標所指向的位址相同,delete該指標時則會導致兩次重複del...