結構體的深拷貝和淺拷貝

2021-09-26 03:18:17 字數 963 閱讀 8913

示例**:

#define _crt_secure_no_warnings

#include #include #include typedef struct teacher

teacher;

// 淺拷貝

// 編譯器的操作只會把指標變數的值,從from copy到 to,但不會把指標變數所指的記憶體空間給拷貝過去

void copyteacher(teacher *to, teacher *from)

void main()

if (t1.alisname != null)

system("pause");

return;

}

上面的**一執行就會宕掉.

這就是典型的深拷貝與淺拷貝的問題

c++編譯器只會進行淺拷貝,只會把指標的值拷貝過去,而不會把指標指向的記憶體空間拷貝過去,不會開闢新的記憶體空間.

c++的=操作預設是淺拷貝,只會把指標變數的值拷貝過去,不會把指標變數指向的記憶體空間的資料拷貝過去.

淺拷貝出現的場景是結構體中間套乙個一級指標或者是二級指標

如何執行深拷貝

如果想執行深拷貝,那麼要顯示地分配記憶體

如下**:

#define _crt_secure_no_warnings

#include #include #include typedef struct teacher

teacher;

void copyteacher(teacher *to, teacher *from)

void main()

if (t1.alisname != null)

system("pause");

return;

}

結構體的深拷貝和淺拷貝問題

如果結構體中有指標 在堆上開闢的空間 以下這個拷貝函式,就是淺拷貝 結構體可以通過變數直接賦值,但不要使用這種方法,要給結構體中的成員 乙個乙個拷貝 void copy teacher struct teacher to,struct teacher from void copy teacher d...

C 的淺拷貝和深拷貝(結構體)

關於淺拷貝和深拷貝這個問題遇上的次數不多,這次遇上整理一下,先說這樣乙個問題,關於淺拷貝的問題,先從最簡單的說起。假設存在乙個結構體 struct student int main struct student stu2 stu2 stu cout age is 18 name is liming ...

深拷貝和淺拷貝

淺拷貝就是物件的資料成員之間的簡單賦值,如你設計了乙個沒有類而沒有提供它的複製建構函式,當用該類的乙個物件去給令乙個物件賦值時所執行的過程就是淺拷貝,如 class a a private int data int main 這一句b a 就是淺拷貝,執行完這句後b.data 5 如果物件中沒有其他...