一、概念
使用一個已經存在的對象,去構造(初始化)另一個對象
二、格式
參數加上const&,因為拷貝構造函數在幾種情況下都會被隱式地使用,因此拷貝構造函數不應該是explict的
const:防止函數內部修改值
&:防止無限循環拷貝
類名(類名 const& 參數名)
{
函數體
}
三、拷貝構造函數的分類
淺拷貝:成員變量無動態內存(指針等)變量時,在拷貝構造函數內對成員變量只做簡單的賦值,不做內存申請
深拷貝:成員變量有動態內存(指針等)變量時,在拷貝構造函數內對成員變量先進行內存申請,然后進行內容拷貝
默認拷貝構造:沒有寫拷貝構造時,系統默認給出(默認的為淺拷貝)
淺拷貝:
//此類情況使用淺拷貝 class Cperson { private: int a; public: Cperson(Cperson const& other);//拷貝構造 } Cperson::Cperson(Cperson const& other) { this->a=other.a; }
深拷貝: