題目:如下為cmystring的宣告,請為該型別新增賦值運算子過載函式。
class cmystring
;cmystring& cmystring::operator=(const cmystring& src)
//防止記憶體洩漏,先釋放原有的記憶體
delete m_pdata;
m_pdata = null;
m_pdata = new
char[strlen(src.m_pdata)+1];
strcpy(m_pdata,src.m_pdata);
return *this;
}
上述程式存在乙個異常安全的問題
當給m_pdata分配存在出錯,new char 丟擲異常,此時m_pdata為空。則很可能會導致程式崩潰。
高階程式設計師必備:考慮程式出現異常時的安全問題
cmystring& cmystring::operator=(const cmystring& src)
return *this;
}
先在棧上構造乙個區域性變數,把本身this物件的資料賦值給區域性變數,出了作用域後,會自動呼叫建構函式。
當記憶體不足,導致new丟擲異常時,this指標的例項還未被改變。則程式不容易出現問題,導致崩潰。
劍指offer 賦值運算子過載
還是有很多點需要注意的。判斷this與傳入的object是否是同乙個物件,相同的話直接返回 this就可以了。判斷傳入物件的陣列是否為空,空的話就不必複製,直接釋放記憶體並將指標置null即可。考慮異常安全。因為new char時如果記憶體不足會丟擲異常,這時安全的做法是先嘗試申請記憶體,申請成功後...
劍指Offer 賦值運算子函式
按照自己淺薄的理解,敲了如下 include using namespace std class cmystring 就是定義了!cmystring char m pchar null cmystring const cmystring other cmystring cmystring opera...
劍指offer 賦值運算子函式
題目 如下為型別cmystring的宣告,請為該型別新增賦值運算子函式 class cmystring 思路 類的定義和基本形式 類其實是定義乙個特殊的資料結構,定義了類的物件包括了什麼,以及可以在這個物件上執行哪些操作 class student 成員函式定義 student student vo...