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
- 異常處理機制(二)之異常處理與捕獲
- Java 的異常處理機制Java
- 8.異常處理機制
- 08.異常處理機制
- SpringMVC異常的處理機制SpringMVC
- java異常的處理機制Java
- Java 中的異常處理機制Java
- goang 錯誤&異常處理機制Go
- PHP 核心 - 異常處理PHP
- C#中的異常處理機制C#
- Python異常處理回顧與總結Python
- C++ 異常機制(上)C++
- 知識點講解七:Python中的異常處理機制Python
- Python異常處理機制、除錯、測試Python除錯
- .NET----錯誤和異常處理機制
- Laravel核心解讀–異常處理Laravel
- 【C++】 C++異常捕捉和處理C++
- 知識點-Spring Boot 異常處理彙總Spring Boot
- PHP 核心知識點(一)異常和錯誤處理PHP
- 一次ceph心跳機制異常的處理
- Python入門學習之異常處理機制Python
- (十五)C++學習 | 強制型別轉換 異常處理C++型別
- C++錯誤和異常處理C++
- C++整理19_異常處理C++
- JAVA的異常處理機制(一)——try...catch...finallyJava
- Python基礎入門(7)- Python異常處理機制Python
- 異常篇——異常處理
- 異常處理機制(一)之throw與throws的區別
- C介面與實現—C裡面的異常處理機制
- React 原始碼解析系列 - React 的 render 異常處理機制React原始碼
- 異常處理
- 【C++】 63_C語言異常處理C++C語言
- Go 函式的健壯性、panic異常處理、defer 機制Go函式
- [原創]利用SEH異常處理機制繞過GS保護
- 轉載 利用SEH異常處理機制繞過GS保護