c++異常處理機制
c++異常處理機制是乙個用來有效地處理執行錯誤的非常強大且靈活的工具,它提供了更多的彈性、安全性和穩固性,克服了傳統方法所帶來的問題.
異常的丟擲和處理主要使用了以下三個關鍵字: try、 throw 、 catch 。
丟擲異常即檢測是否產生異常,在c++中,其採用throw語句來實現,如果檢測到產生異常,則丟擲異常。該語句的格式為:
throw 表示式;
如果在try語句塊的程式段中(包括在其中呼叫的函式)發現了異常,且拋棄了該異常,則這個異常就可以被try語句塊後的某個catch語句所捕獲並處 理,捕獲和處理的條件是被拋棄的異常的型別與catch語句的異常型別相匹配。由於c++使用資料型別來區分不同的異常,因此在判斷異常時,throw語 句中的表示式的值就沒有實際意義,而表示式的型別就特別重要。
try-catch語句形式如下 :
trycatch(型別名 [形參名]) // 捕獲特定型別的異常
catch(型別名 [形參名]) // 捕獲特定型別的異常
catch(...) // 三個點則表示捕獲所有型別的異常
【範例1】處理除數為0的異常。該範例將上述除數為0的異常可以用try/catch語句來捕獲異常,並使用throw語句來丟擲異常,從而實現異常處理,實現**如**清單1-1所示。
// **清單1-1
1 #include//包含標頭檔案
2 #include
3 double fuc(double x, double y) //定義函式
4
9 return x/y; //否則返回兩個數的商
10 }
11 void main()
12 {
13 double res;
14 try //定義異常
15 {
16 res=fuc(2,3);
17 cout<
【範例2】自定義異常型別 (在本文開始的**中已經給出示範)
三、異常的介面宣告
為了加強程式的可讀性,使函式的使用者能夠方便地知道所使用的函式會丟擲哪些異常,可以在函式的宣告中列出這個函式可能丟擲的所有異常型別,例如:
void fun() throw( a,b,c,d);
這表明函式fun()可能並且只可能丟擲型別(a,b,c,d)及其子型別的異常。
如果在函式的宣告中沒有包括異常的介面宣告,則此函式可以丟擲任何型別的異常,例如:
void fun();
乙個不會丟擲任何型別異常的函式可以進行如下形式的宣告:
void fun() thow();
五、異常處理中需要注意的問題
1. 如果丟擲的異常一直沒有函式捕獲(catch),則會一直上傳到c++執行系統那裡,導致整個程式的終止
2. 一般在異常丟擲後資源可以正常被釋放,但注意如果在類的建構函式中丟擲異常,系統是不會呼叫它的析構函式的,處理方法是:如果在建構函式中要丟擲異常,則在丟擲前要記得刪除申請的資源。
3. 異常處理僅僅通過型別而不是通過值來匹配的,所以catch塊的引數可以沒有引數名稱,只需要引數型別。
4. 函式原型中的異常說明要與實現中的異常說明一致,否則容易引起異常衝突。
5. 應該在throw語句後寫上異常物件時,throw先通過copy建構函式構造乙個新物件,再把該新物件傳遞給 catch.
那麼當異常丟擲後新物件如何釋放?
異常處理機制保證:異常丟擲的新物件並非建立在函式棧上,而是建立在專用的異常棧上,因此它才可以跨接多個函式而傳遞到上層,否則在棧清空的過程中就會被 銷毀。所有從try到throw語句之間構造起來的物件的析構函式將被自動呼叫。但如果一直上溯到main函式後還沒有找到匹配的catch塊,那麼系統 呼叫terminate()終止整個程式,這種情況下不能保證所有區域性物件會被正確地銷毀。
6. catch塊的引數推薦採用位址傳遞而不是值傳遞,不僅可以提高效率,還可以利用物件的多型性。另外,派生類的異常撲獲要放到父類異常撲獲的前面,否則,派生類的異常無法被撲獲。
7. 編寫異常說明時,要確保派生類成員函式的異常說明和基類成員函式的異常說明一致,即派生類改寫的虛函式的異常說明至少要和對應的基類虛函式的異常說明相同,甚至更加嚴格,更特殊。
c 異常處理機制
c 異常處理機制 c 異常處理機制是乙個用來有效地處理執行錯誤的非常強大且靈活的工具,它提供了更多的彈性 安全性和穩固性,克服了傳統方法所帶來的問題.異常的丟擲和處理主要使用了以下三個關鍵字 try throw catch 丟擲異常即檢測是否產生異常,在c 中,其採用throw語句來實現,如果檢測到...
c 異常處理機制
c 異常處理機制是乙個用來有效地處理執行錯誤的非常強大且靈活的工具,它提供了更多的彈性 安全性和穩固性,克服了傳統方法所帶來的問題.異常的丟擲和處理主要使用了以下三個關鍵字 try throw catch 丟擲異常即檢測是否產生異常,在c 中,其採用throw語句來實現,如果檢測到產生異常,則丟擲異...
C 異常處理機制
c 異常處理機制主要使用try,throw,catch三大關鍵字。try catch語句形式如下 require redcarpet markdown redcarpet.new hello world puts markdown.to htmltry catch exception1 ex 捕獲型...