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

2021-06-22 07:42:50 字數 615 閱讀 2656

結論1:確保當物件自我賦值時operator=有良好行為,其中技術包括比較「**物件」和「目標物件"的位址(證同測試)、精心周到的語句順序、以及copy-and-swap。

例如:

class bitmap ;

class widget ;

證同測試:

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

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

copy-and-swap技術:

class widget ;

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

考慮到函式以by value方式傳遞引數時會造成乙份副本,可以採用如下方法:

widget& widget::operator=(widget rhs)
結論2:確定任何函式如果操作乙個以上的物件,而其中多個物件是同乙個物件時,其行為仍然正確。

條款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。...

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

自我賦值 發生在物件被賦值給自己時 方式1 class widget widget w w w 方式2 a i a j 潛在的自我賦值,如果i和j有相同的值 方式3 px py 潛在的自我賦值,若px和py指向同乙個東西 class base class derived public base vo...