1.什麼是Copy Constructor?
Copy Constructor 是一個特殊的構造函數,一般只有一個參數,這個參數一般是用const修飾的,對自己類的一個引用(reference)。什麼時候會用到Copy Constructor?
當我們定義一個對象時,它是由另外一個對象來初始化的時候就用到Copy Constructor了。還有就是在一個方法以值作為參數傳進去或者一個方法中以值作為返回。
對於我這新手C++,Copy Constructor 用的比較少,真正用到了也不知道,因為一個類缺少 Copy Constructor 時,編譯器會自動生成一個。
2.趕快來看一個Copy Constructor例子
2.1系統默認會提供一個Copy Constructor
class People{
private:
int m_age;
public:
People(int age):m_age(age){
cout << "constructor" << endl;
}
~People(){
cout << "destructor" << endl;
}
int getAge() const{
return m_age;
}
};
一個簡單的類,叫People,只有一個屬性age
People p1(18);
cout << "p1's age " << p1.getAge() << endl;
People p2(p1);
cout << "p2's age " << p2.getAge() << endl;
當我們調用上面的代碼時的輸出結果就是:
代碼工作非常符合我們預期,因為系統會提供一個Copy Constructor,對類裡的屬性進行簡單的賦值工作。
2.2自定義的Copy Constructor
class People{
private:
int m_age;
public:
People(int age):m_age(age){
cout << "constructor" << endl;
}
//copy constructor
People(const People& p){
cout << "copy constructor" << endl;
}
~People(){
cout << "destructor" << endl;
}
int getAge() const{
return m_age;
}
};
People p1(18);
cout << "p1's age " << p1.getAge() << endl;
People p2(p1);
cout << "p2's age " << p2.getAge() << endl;
這次我們自定義了一個Copy Constructor
還是調用上次的代碼,結果:
看,成功的調用了我們的copy constructor,因為我們的copy constructor 裡什麼也沒做,所以p2的age就是一個未初始化的int值了。