class cmystring;
是否把返回值的型別宣告為該型別的引用,並在函式結束前返回例項自身的引用(*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...