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