class cmystring
;//賦值建構函式
cmystring& cmystring::operator = (const cmystring& str)
//新分配記憶體,將str的m_pdata記憶體拷貝到m_pdata中
m_pdata = new char[strlen(str.m_pdata) + 1];
strcpy(m_pdata, str.m_pdata);*/
//在這個函式中,我們定義乙個臨時例項strtemp,並把strtemp的m_pdata指向當前例項(*this)的m_pdata。
//由於strtemp是個區域性變數,但程式設計師執行到if的外面是也就出了的該變數的域,就會自動呼叫strtemp的析構函式,
//就會把strtemp.m_pdata所指向的記憶體釋放掉。由於strtemp.m_pdata指向的記憶體就是當前例項之前m_pdata的記憶體。
//這就相當於自動呼叫析構函式釋放當前例項的記憶體。如果新增加指標成員變數,
//我們只需要在析構函式裡正確地釋放,而不需要對賦值運算子函式做任何修改。
cmystring tempstr(str);
char* temp = tempstr.m_pdata;
tempstr.m_pdata = m_pdata;
m_pdata = temp;
}return *this;
}//拷貝建構函式
cmystring::cmystring(const cmystring& str)
cmystring::~cmystring(void)
}
拷貝建構函式和賦值建構函式
拷貝構造是確確實實構造乙個新的物件,並給新物件的私有成員賦上引數物件的私有成員的值,新構造的物件和引數物件位址是不一樣的,所以如果該類中有乙個私有成員是指向堆中某一塊記憶體,如果僅僅對該私有成員進行淺拷貝,那麼會出現多個指標指向堆中同一塊記憶體,這是會出現問題,如果那塊記憶體被釋放了,就會出現其他指...
拷貝建構函式和賦值構造
為什麼空類可以建立物件呢?複製建構函式的引數可以是 const 引用,也可以是非 const 引用。一般使用前者,這樣既能以常量物件 初始化後值不能改變的物件 作為引數,也能以非常量物件作為引數去初始化其他物件。乙個類中寫兩個複製建構函式,乙個的引數是 const 引用,另乙個的引數是非 const...
建構函式 拷貝建構函式 賦值建構函式
class和struct很大乙個區別在於,c除了成員的訪問控制許可權,struct中的成員預設是public,而class中的field預設是private class還有乙個special的地方是它有建構函式 constructor。建構函式是class中的一員,和成員變數 其他成員函式一起構成乙...