拷貝構造函數:首先是一個構造函數,特殊在只有一個參數且用對象的引用作參數(規定),函數體是一些賦值語句
淺拷貝:對對象中的數據成員簡單賦值,默認拷貝就是淺拷貝,分系統默認和手寫的
深拷貝:對象存在動態成員,也就是自己在堆中申請了一塊內存空間(C++中用new申請)一定是自己寫的:對一些放在棧中的成員變量(普通變量)賦值,手動申請一個和構造函數中手動申請的一塊內存空間(堆中)相同大小的內存空間並賦值。
例如:深拷貝
#include<IOSTREAM.H> class Rect { public: Rect() // 構造函數,p指向堆中分配的一空間 { p = new int(100); } Rect(const Rect& r) { width = r.width; height = r.height; p = new int; // 爲新對象重新動態分配相同大小的空間,只是它的值不一定是100 *p = *(r.p);//賦值 } ~Rect() // 析構函數,釋放動態分配的空間 { if(p != NULL) { delete p; } } public: int width; int height; int *p; // 一指針成員 }; int main() { Rect* rect1=new Rect; Rect rect2(rect1); // 複製對象 cout<<(rect1.p)<<" "<<(rect2.p)<<endl;//輸出100 100 說明對象rect1 ,rect2一樣 return 0; }