C 異常機制

2021-08-19 01:52:20 字數 1294 閱讀 3159

1、異常的丟擲:

classmyerror

};

voiddo_error()

intmain()

上面的例子中,通過throw丟擲了乙個異常類的例項,這個異常類,可以是任何乙個自定義的類,通過例項化傳入的引數可以表明發生的錯誤資訊。其實異常就是乙個帶有異常資訊的類而已。異常被丟擲後,需要**獲,從而可以從錯誤中進行恢復,那麼接下來看看如何去捕獲乙個異常吧。

在上面這個例子中使用丟擲異常的方式來進行錯誤處理相比與之前使用區域性跳轉的實現來說,最大的不同之處就是異常丟擲的**塊中,物件會被析構,稱之為堆疊反解.

2、異常的捕獲:

c++中通過catch關鍵字來捕獲異常,捕獲異常後可以對異常進行處理,這個處理的語句塊稱為異常處理器。下面是乙個簡單的捕獲異常的例子:12

3456

trycatch(conststring& e)

catch有點像函式,可以有乙個引數,throw丟擲的異常物件,將會作為引數傳遞給匹配到到catch,然後進入異常處理器,上面的**僅僅是展示了丟擲一種異常的情況,加入try語句塊中有可能會丟擲多種異常的,那麼該如何處理呢,這裡是可以接多個catch語句塊的,這將導致引入另外乙個問題,那就是如何進行匹配。

3、異常的匹配

函式匹配的時候存在型別轉換,但是異常在匹配過程中不會做型別的轉換。

儘管異常處理器不做型別轉換,但是基類可以匹配到派生類,這個在函式和異常匹配中都是有效的,但是需要注意catch的形參需要是引用型別或者是指標型別,否則會導致切割派生類這個問題。

異常物件型別與catch說明符的型別必須完全匹配,只有以下幾種情況例外:

1.允許從非const物件到const型別物件的轉換.

2.允許派生型別到基類型別的轉換.

3.將陣列轉換為指向陣列型別的指標,將函式轉換為指向函式的指標.

建構函式完成物件的構造和初始化,需要保證不要在建構函式中丟擲異常,否則可能導致物件不完整或沒有完全初始化.

析構函式主要完成資源的清理,需要保證不要在析構函式內丟擲異常,否則可能導致資源洩漏(記憶體洩漏、控制代碼未關閉等).

C 異常 異常機制

c 異常是丟程式執行過程中發生的異常情況 例如被0除 的一種響應。異常提供了將控制權從程式的乙個部分傳遞到另一部分的途徑。對異常的處理有3個組成部分 引發異常 使用處理程式捕獲異常 使用try塊。程式在出現問題時將引發異常。throw語句實際上是跳轉,即命令程式跳到另一條語句。throw關鍵字表示引...

C 異常機制

在c 中的函式呼叫中,是用棧來存放其中資料物件。表1.1 我們結合這張表,來簡單介紹函式的棧結構。其中每乙個函式在入棧的時候,編譯器會自動新增額外的資料結構,這裡的exception registration就是被額外新增進來的。對於這個結構體我們稍後解釋,首先來介紹函式的基本結構。從這張圖中可以清...

C 異常機制

一 簡單例項 異常是通過丟擲物件而引發的,丟擲物件的型別決定應該啟用那個處理 即catch中的語句 被處理 是呼叫鏈中與該丟擲物件型別匹配,並且離丟擲異常位置最近的那乙個 例如 void test int main catch string e t value void print void pus...