賦值運算子函式注意問題

2021-08-02 07:07:26 字數 694 閱讀 5484

classname & operator = (const classname &obj)

注意class cmystring

cmystring& cmystring::operator =(const cmystring &str)

1. 是否把返回值的型別宣告為類的引用,並在函式結束前返回例項自身的引用(即*this)。只有返回乙個引用,才可以允許連續賦值。否則,如果函式的返回值是void,那麼這個賦值運算子不能連續賦值,假設有3個cmystring物件:str1, str2, str3, 在程式語句中str1 = str2 =str3將不能通過編譯。

2. 是否把傳入的引數型別宣告為常量引用。如果傳入的引數不是引用而是例項,那麼從形參到實參會呼叫一次複製建構函式。把引數宣告為引用則可以避免這樣的無謂消耗,能提高**的效率。同時,我們在賦值運算子函式內不會改變傳入的例項的狀態,因此應該為傳入的引用引數加上const關鍵字。

3. 是否釋放例項自身已有的記憶體。

4. 是否判斷傳入的引數和當前的例項(*this)是不是同乙個例項。如果是同乙個,則不進行賦值操作,直接返回。如果事先不判斷就進行賦值,那麼在釋放例項自身的記憶體的時候就會導致嚴重的問題:當*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...