建構函式可以沒有,也可以有多個。複製建構函式只有乙個,不定義編譯器自動生成,使用者寫就使用自定義的複製建構函式
物件之間的複製語句不會呼叫複製建構函式。
利用編譯器提供的拷貝建構函式,會做淺拷貝案例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...