Effective c++條款11:在operator=中處理“自我賦值”
目錄
1.不安全的operator=版本
class bitmap{
};
class widget{
widget& operator=(const widget& rhs){
delete pb;
pb = new bitmap(*rhs.pb);
return *this;
}
private:
bitmap* pb;
};
自我賦值的不安全:這裡的rhs物件如果和this指向的物件是同一個,那麼先進行了delete pb, 相當於給rhs.pb此時也指向了一塊已刪除的物件。這是不安全的。
異常不安全:這裡new操作,或bitmap的拷貝建構函式呼叫發生異常,那麼此時this->pb指向了一塊已刪除的物件。這也是不安全的。
2.安全的operator=版本
class bitmap{
};
class widget{
widget& operator=(const widget& rhs){
bitmap* tmp = pb;
pb = new bitmap(*rhs.pb);
delete tmp;
return *this;
}
private:
bitmap* pb;
};
這裡做了一個備份,並且在最後才刪除之前this->pb所指向的物件,所以可以處理自我賦值的不安全問題。而且即使此時new那一段語句丟擲異常,此時pb仍能保持原有的指向,解決了異常不安全問題。
注:copy與swap技術也能用來解決這種自我賦值與異常安全問題。
class bitmap{
};
class widget{
void swap(widget& rhs){
//交換
}
widget& operator=(const widget& rhs){
widget temp(rhs);
swap(temp);
return *this;
}
private:
bitmap* pb;
};
參考 《Effective c++》
相關文章
- C++筆記 11:在operator中處理“自我賦值“C++筆記賦值
- Effective C++ 條款08_不止於此C++
- Effective Modern C++ 系列之 條款2: autoC++
- [讀書筆記][effective C++]條款30-inline的原理筆記C++inline
- 《Effective C++》閱讀總結(二):類的構造、析構和賦值C++賦值
- 李光榮在無懼中挑戰自我,實現自我價值
- 《Effective C++》第三版-2. 構造析構賦值運算(Constructors,Destructors,and Assignment Operators)C++賦值Struct
- C++中“非常量引用的初始值必須是左值”的處理方法C++
- Java 11:在Java中處理HTTP和WebSocket的新方法!JavaHTTPWeb
- effective C++ : CHAPTER 8C++APT
- 【Effective Modern C++】索引C++索引
- Effective C++筆記C++筆記
- C++中的字串編碼處理C++字串編碼
- selenium中JS如何處理滾動條JS
- 小米海外發布四款Redmi Note 11 涵蓋四款處理器
- 如何處理JavaScript 中的貨幣值?JavaScript
- effective C++筆記1C++筆記
- openCV中的影像處理 3 影像閾值OpenCV
- Windows批處理中的變數和值Windows變數
- Recoil 中預設值的正確處理
- 《Effective C++》讀書筆記C++筆記
- 遊戲運營的自我修養(中):學會條理、主動出擊遊戲
- 04 Windows批處理中的條件執行Windows
- 為什麼在pyhton中不能用函式重新賦值函式賦值
- 【C++】 C++異常捕捉和處理C++
- C++ 自我學習C++
- 在C++中使用libuv時對回撥的處理 (2)C++
- DOM在Ahooks中的處理過程Hook
- netty系列之:在netty中處理CORSNettyCORS
- Python 影像處理 OpenCV (6):影像的閾值處理PythonOpenCV
- C++(std::cout 處理 char*)C++
- 【譯】Effective TensorFlow Chapter12——TensorFlow中的數值穩定性APT
- Operator-sdk 在 KaiwuDB 容器雲中的使用AI
- 遊戲基礎知識——遊戲的“自我賦權”和“非自我賦權”傾向遊戲
- ORACLE 11G DATAGUARD 日誌中斷處理方案Oracle
- PLC遠端監控在汙水處理市場價值巨大
- 【scikit-learn基礎】--『預處理』之 缺失值處理
- 關於C++ 的異常處理,解答在這來看看吧~C++