《Effective C++讀書筆記》--條款29:努力寫出異常安全的代碼

異常安全有兩個條件:

①不泄漏任何資源

②不允許數據破壞

對於資源泄漏的問題我們只要遵循以對象管理資源這條條款就很容易解決,對於數據敗壞的問題,首先我們要知道異常安全函數的概念,異常安全函數提供以下三個保證之一:
①基本承諾:如果異常被拋出,程序內所有事物仍保持在有效狀態下,沒有任何對象或數據結構被破壞,所有對象都處於一種內部前後一致的狀態。

②強烈保證:如果異常被拋出,程序狀態不改變。同時,如果函數成功,則完全成功,如果函數失敗,則程序會回覆到調用函數前的狀態。類似於原子操作。

③nothrow保證:承諾絕不拋出異常,它們總能完成它們原先承諾的功能。(例如對於內置類型上的所有操作都提供nothrow保證)

有一個一般化的操作很容易提供強烈保證,該策略被稱爲copy and swap,即爲你打算修改的對象(原件)創建一個副本,然後在副本上做一切必要的修改,若有任何修改動作拋出異常,原對象未改變狀態,待所有改變都成功後,再將修改過的副本和原對象在一個不拋出異常的操作中置換。實現的方法通常是將所有對象所擁有的數據從原對象放進另一個對象中,然後賦予原對象一個指針指向該副本。

發佈了73 篇原創文章 · 獲贊 15 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章