拷貝建構函式: 拷貝引用另一物件的建構函式。 構造過程中引用該物件的屬性值。
如: string::string(const string &other)
int length=strlen(other.m_data);
m_data= new char[length+1];
strcpy(m_data,other.m_data);
賦值函式: 過載賦值運算子=, operator = , 並返回重新賦值後的物件。該函式只能在物件已分配記憶體空間後才能呼叫。
如:string& string::operate =(const string &other)
//自檢
if(this==&other) return *this;
if(m_data)
delete m_data;
int length=strlen(other.m_data);
m_data= new char[length+1];
strcpy(m_data,other.m_data);
它們之間的區別: 拷貝建構函式在物件即將定義的時候拷貝另一物件進行構造,這時為新物件申請記憶體空間 new char[length+1];
賦值函式是在物件已構造完畢後才呼叫,所以在賦值函式中首先需要 delete m_data,清除記憶體空間。
它們之間的共同點: 都是引用另乙個物件建立或重置自身。從上面**可以看出,賦值函式可代替拷貝建構函式使用。
拷貝建構函式與賦值建構函式
include stdafx.h include include using namespace std class a a a a 過載拷貝函式 a int id,char t name a char name a operator a a 注意 此處一定要返回物件的引用,否則返回後其值立即消失!...
拷貝建構函式與賦值建構函式
什麼時候用拷貝建構函式,和賦值建構函式 一 當用乙個已初始化過了的自定義類型別物件去初始化另乙個新構造的物件的時候,拷貝建構函式就會被自動呼叫。也就是說,當類的物件需要拷貝時,拷貝建構函式將會被呼叫。以下情況都會呼叫拷貝建構函式 乙個物件以值傳遞的方式傳入函式體 乙個物件以值傳遞的方式從函式返回 乙...
拷貝建構函式與賦值函式
為了便於說明我們以string類為例 首先定義string類,而並不實現其成員函式。class string 位拷貝拷貝的是位址,而值拷貝則拷貝的是內容。如果定義兩個string物件a和b。a.m data和b.m data分別指向一段區域,a.m data windows b.m data lin...