題目要求為下面乙個類實現乙個賦值運算子的函式:
class cmystring ;
我們要實現任意的乙個類的賦值運算子函式,都要注意一些方面:
書上的解法給的確實很完備,而且後來用了一種巧妙的方法讓程式自動釋放記憶體。但我覺得重點是他提到的異常安全性的處理,這裡的話如果我們在new的時候記憶體不夠,而我們又已經delete掉原來的記憶體,就會導致呼叫者的記憶體被無故釋放了;所以書上採用新建臨時變數,然後再讓*this的m_pdata指標和臨時變數的m_pdatam做交換,就算如果新建臨時變數的時候記憶體不夠,也可以保證呼叫者呼叫失敗也沒有被改變。
但是我想了一下,異常安全性的思想是很寶貴,但是實現起來其實可以用try catch這樣也很直觀:
cmystring & cmystring::operator = (const cmystring& str)
try catch(std::exception& e)
return *this;
}
這裡提到賦值運算子的話,就要順便說一下拷貝建構函式;
cmystring s2;
cmystring s1 = s2; //這一行其實呼叫的是拷貝建構函式
區別就在於,拷貝建構函式的呼叫,之前是沒有物件的,所以如果有動態記憶體,拷貝建構函式肯定不會先去delete;
而賦值運算子是講乙個物件賦給另外乙個物件,之前是有物件的,這麼一來就有了對之前物件的處理。
我把所有函式的實現和一些注意事項放在這裡啦~
劍指offer 面試題1 賦值運算子函式
題目 如下為型別cmystring的宣告,請為該型別新增賦值運算子函式。class cmystring 當面試官要求應聘者定義乙個賦值運算子函式時,他對 會關注以下幾點 是否把返回值的型別宣告為該型別的引用,並在函式結束前返回例項自身的引用 即 this 只有返回乙個引用,才可以允許連續賦值。否則如...
《劍指Offer》面試題1 賦值運算子函式
要求 如下型別為cmystring的宣告,請為型別新增賦值運算子函式。class cmystring 測試用例 把乙個cmystring的例項賦值給另外乙個例項 把乙個cmystring的例項賦值給自己 連續賦值 本題考點 對c 基本語法的理解,如運算子過載 常量引用等。考查對記憶體洩漏的理解 對於...
劍指Offer 面試題1(賦值運算子函式)
生活有種律動,須有光有影,有左右有,有晴有雨,滋味就含在這變而不猛的曲折裡.老舍 題目描述 如下為型別cmystring的宣告,請為該型別新增賦值運算子函式。class cmystring 題目解析 對於定義乙個賦值運算子函式時,需要考慮 1.是否把返回值的型別宣告為該型別的引用,並在函式結束前返回...