C 拷貝建構函式 淺拷貝和深拷貝

2021-10-04 23:43:30 字數 1074 閱讀 4086

建構函式可以沒有,也可以有多個。

複製建構函式只有乙個,不定義編譯器自動生成,使用者寫就使用自定義的複製建構函式

物件之間的複製語句不會呼叫複製建構函式。

利用編譯器提供的拷貝建構函式,會做淺拷貝

淺拷貝帶來的問題就死堆區記憶體的重複釋放

案例1:
class student

~student()

}//程式正常輸出

void test1(void)

int main(void)

案例2:
class student

~student() //析構函式做物件銷毀時的一些清理工作

cout << "student類的析構函式呼叫" << endl;

}} //程式正常輸出

void test1(void)

//按照先進後出原則test1函式執行結束,stu2物件先銷毀,height指向的記憶體先呼叫析構函式,銷毀了height指向的堆區記憶體;接著stu1的物件銷毀也呼叫析構函式,height會被重複釋放,程式崩潰

int main(void)

自己定義拷貝建構函式,解決淺拷貝帶來的問題

class student

~student() //析構函式做物件銷毀時的一些清理工作

cout << "student類的析構函式呼叫" << endl;

}student(const student &s) //自定義拷貝建構函式

} //程式正常輸出

void test1(void)

int main(void)

如果有屬性的內存在堆區開闢,一定要自定義拷貝建構函式,防止淺拷貝帶來的問題

C 拷貝建構函式 深拷貝,淺拷貝

對於普通型別的物件來說,它們之間的複製是很簡單的,例如 int a 88 int b a 而類物件與普通物件不同,類物件內部結構一般較為複雜,存在各種成員變數。下面看乙個類物件拷貝的簡單例子。執行程式,螢幕輸出100。從以上 的執行結果可以看出,系統為物件b分配了記憶體並完成了與物件a的複製過程。就...

C 拷貝建構函式 深拷貝,淺拷貝

對於普通型別的物件來說,它們之間的複製是很簡單的,例如 int a 88 int b a 而類物件與普通物件不同,類物件內部結構一般較為複雜,存在各種成員變數。下面看乙個類物件拷貝的簡單例子。include using namespace std class cexample void show 執...

C 拷貝建構函式 深拷貝,淺拷貝

c 拷貝建構函式 深拷貝,淺拷貝 對於普通型別的物件來說,它們之間的複製是很簡單的,例如 int a 88 int b a 而類物件與普通物件不同,類物件內部結構一般較為複雜,存在各種成員變數。下面看乙個類物件拷貝的簡單例子。iostream using namespace std class ce...