11 在 operator 中處理「自我賦值」

2021-10-18 14:23:42 字數 352 閱讀 8706

確定任何函式如果操作乙個以上的物件,而其中多個物件是同乙個物件時,其行為仍然正確。

「自我賦值」很容易被使用,雖然沒有意義,但若不加以 處理會造成系統報錯。

法 1 傳統做法:在 operator= 裡做乙個「證同測試( identity test )」達到「自我賦值」的檢測目的。

widget& widget::operator=( const widget& rhs )

法2 拷貝副本,讓operator= 具備異常安全性

widget& widget::operator=( const widget& rhs )

條款11 在operator 中處理「自我賦值」

結論1 確保當物件自我賦值時operator 有良好行為,其中技術包括比較 物件 和 目標物件 的位址 證同測試 精心周到的語句順序 以及copy and swap。例如 class bitmap class widget 證同測試 widget widget operator const widg...

條款11 在operator 中處理」自我賦值「

一 有別名的存在,所以有可能自我賦值。下面的 不具備自我賦值的安全性 也不具備 異常安全性 class bitmap class widget widget widget operator const widget rhs 自我賦值的話,呼叫的物件和傳入的引數是同乙個物件,this 跟rhs是同乙個...

條款11 在operator 中處理「自我賦值」

自行管理資源時,可能在停止使用資源之前意外釋放了它。class data class widget widget widget operator const widget rw operator 函式內的 this和rw可能是同一物件,結果就是widget物件持有乙個指標指向一塊已被刪除的data。...