01賦值運算子函式

2021-09-19 01:29:01 字數 944 閱讀 7827

如下為型別宣告,為該類新增賦值運算子函式。

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...