如下為型別宣告,為該類新增賦值運算子函式。
class cmystring
;
需要注意以下問題:
1.返回值是否為引用:如果不是引用則不可以進行連續賦值(str1 = str2 = str3)
2.是否傳入常量引用:常量可以保證不會改變例項的狀態,引用可以提高**效率
3.是否釋放自身已有記憶體:如果未釋放則會出現記憶體洩漏
4.是否防止自賦值:如果釋放自身記憶體,則找不到需要賦值的內容
為主函式新增合適的函式宣告
class cmystring
;
解決方法1
#include cmystring& cmystring::operator =(const cmystring &str)
delete m_pdata;
m_pdata = nullptr;
m_pdata = new char[strlen(str.m_pdata) + 1];
strcpy(m_pdata, str.m_pdata);
return *this;
}
解決方案2,考慮安全性
考慮new失敗,m_pdata將為空指標,繼續操作會導致崩潰
方法1,先new,後delete
方法2,先建立乙個臨時例項,再交換臨時例項的指標與原來例項的指標,當臨時例項出作用域時則會自動析構,如果在拷貝建構函式中new失敗,我們可以丟擲異常等,但是原來的例項仍然存在
cmystring& cmystring::operator=(const cmystring& str)
return *this;
}
賦值運算子函式
賦值運算子函式的 需要關注幾點 1 是否把返回值的型別宣告為該型別的引用,並在函式結束前返回例項自身的引用 即 this 只有返回乙個引用,才可以允許連續賦值。否則如果函式的返回值void,該賦值運算子將不能做連續賦值。2 是否把傳入的引數的型別宣告為常量引用。引數宣告為引用可以避免無謂的消耗,提高...
賦值運算子函式
題目 如下為型別cmystring的宣告,請為該型別新增賦值運算子函式。class cmystring 1 經典解法,初級程式設計師 cmystring cmystring operator const cmystring str 2 考慮異常安全的解法,高階程式設計師 cmystring cmys...
賦值運算子函式
型別宣告如下 class cmystring 請為上型別新增賦值運算子函式.經典解法 cmystring cmystring operator const cmystring str 考慮異常安全性解法 cmystring cmystring operator const cmystring str...