C++異常處理機制核心觀點總結
潛心研究C++異常處理機制數日,有所得,與大家共享:
C++異常處理機制核心觀點:
0.如果使用普通的處理方式:ASSERT,return等已經
足夠簡潔明瞭,請不要使用異常處理機制.
1.比C的setjump,longjump優秀.
2.可以處理任意型別的異常.
你可以人為地丟擲任何型別的物件作為異常.
throw 100;
throw "hello";
...
3.需要一定的開銷,頻繁執行的關鍵程式碼段避免使用
C++異常處理機制.
4.其強大的能力表現在:
A.把可能出現異常的程式碼和異常處理程式碼隔離開,結構更清晰.
B.把內層錯誤的處理直接轉移到適當的外層來處理,化簡了處理
流程.傳統的手段是通過一層層返回錯誤碼把錯誤處理轉移到
上層,上層再轉移到上上層,當層數過多時將需要非常多的判斷,
以採取適當的策略.
C.區域性出現異常時,在執行處理程式碼之前,會執行堆疊回退,即為
所有區域性物件呼叫解構函式,保證區域性物件行為良好.
D.可以在出現異常時保證不產生記憶體洩漏.通過適當的try,catch
佈局,可以保證delete pobj;一定被執行.
E.在出現異常時,能夠獲取異常的資訊,指出異常原因.
並可以給使用者優雅的提示.
F.可以在處理塊中嘗試錯誤恢復.保證程式幾乎不會崩潰.
通過適當處理,即使出現除0異常,記憶體訪問違例,也能
讓程式不崩潰,繼續執行,這種能力在某些情況下及其重要.
以上ABCDEF可以使你的程式更穩固,健壯,不過有時讓程式崩潰似乎更
容易找到原因,程式老是不崩潰,如果處理結果有問題,有時很難查詢.
5.並不是只適合於處理'災難性的'事件.普通的錯誤處理也可以用異常機制
來處理,不過如果將此濫用的話,可能造成程式結構混亂,
因為異常處理機制本質上是程式處理流程的轉移,不恰當的,過度的轉移顯然
將造成混亂.許多人認為應該只在'災難性的'事件上使用異常處理,以避免異常
處理機制本身帶來的開銷,你可以認為這句話通常是對的.
6.先讓程式更脆弱,再讓程式更堅強.首先,它使程式非常脆弱,稍有差錯,馬上
執行流程跳轉掉,去尋找相應的處理程式碼,以求適當的解決方式.
很像一個人身上帶著許多藥品,防護工具出行,稍有頭暈,馬上拿出清涼油;
遇到蚊子立刻拿出電蚊拍滅之.
WINDOWS:
7.將結構化異常處理結合/轉換到C++異常物件,可以更好地處理WINDOWS程式
出現的異常.
8.盡一切可能使用try,catch,而不是win32本身的結構化異常處理或者
MFC中的TRY,CATCH巨集.
用得恰到好處,方顯C++異常之美妙!
相關文章
- C++異常處理機制C++
- 異常處理機制
- C++ 異常處理機制的實現C++
- Java異常處理機制Java
- windows核心程式設計---未處理異常,向量化異常處理與C++異常Windows程式設計C++
- 異常處理機制(二)之異常處理與捕獲
- 深入理解C++中的異常處理機制C++
- 08.異常處理機制
- java異常的處理機制Java
- Java 的異常處理機制Java
- Python異常處理機制Python
- goang 錯誤&異常處理機制Go
- SpringMVC異常的處理機制SpringMVC
- Java 中的異常處理機制Java
- Asp.Net 異常處理機制ASP.NET
- 解析Oracle developer 異常處理機制OracleDeveloper
- Struts的異常處理機制 (轉)
- PHP 核心 - 異常處理PHP
- C++ 異常處理C++
- C++異常處理C++
- Windows核心讀書筆記——Windows異常分發處理機制Windows筆記
- C++和結構化異常處理C++
- C#中的異常處理機制C#
- 深入理解java異常處理機制Java
- c++異常處理格式C++
- c++ 異常處理(2)C++
- c++ 異常處理(1)C++
- c++異常處理 (轉)C++
- C++ 異常機制(上)C++
- HIVEMapJoin異常問題處理總結Hive
- 總結:整理 oracle異常錯誤處理 .Oracle
- .NET----錯誤和異常處理機制
- PHP異常、錯誤處理機制筆記PHP筆記
- Laravel核心解讀–異常處理Laravel
- 知識點講解七:Python中的異常處理機制Python
- 【C++】 C++異常捕捉和處理C++
- Python異常處理回顧與總結Python
- 一次ceph心跳機制異常的處理