c 異常處理,異常宣告,捕獲異常

2021-05-10 22:52:46 字數 1548 閱讀 6228

c++

捕獲異常的一些規則:

1. 

非mfc 的c++ 異常應該用過引用來捕獲。使用引用來捕獲異常不需要刪除c++ 異常物件。因為使用引用捕獲的異常物件會在棧中傳遞。而且保持了多型性,使得你捕獲的異常正是你丟擲的異常物件。使用指標捕獲異常的話,需要你刪除異常物件。使用值捕獲的話,會導致物件的slicing 問題。更詳細的資訊見effective  c++ 第13 條.

2.    mfc 異常應該通過指標來捕獲。因為它們通常從堆中分配。當你處理完異常之後,你需要呼叫delete 成員函式。如下所示:

try

catch(cfileexception *e)

因此,你不能用省略(catch (…)) 來捕獲mfc 異常, 這通常會導致記憶體洩露。必須使用delete 成員函式來刪除異常,而不要使用delete ,因為一些mfc 異常作為靜態物件建立。

一旦你捕獲了異常,你可以通過執行下列典型動作組合來處理:

●  什麼也不做

●  修改這個問題並重新執行**

●  修改這個問題但不重新執行**

●  如果使用者需要的話,向使用者顯示出錯資訊。

●  如果出現的問題不是程式錯誤的話,輸出乙個跟蹤的診斷訊息。

●  如果出現的問題是乙個程式錯誤,輸出乙個斷言。

●  在日誌檔案裡記錄這個問題

●  如果異常是不可恢復的,終止程序的執行。

●  **已分配的資源

●  重新丟擲這個異常,或者丟擲乙個新的異常。

使用預設捕獲處理器(catch ( … ))

預設捕獲處理器可以捕獲任何乙個型別的異常。包括系統產生和程式產生的異常。其行為和switch 語句的default 類似。這種處理方式功能很強大,使用也很方便。但是如果使用不當的話,是很有害的,因為你不能確定出現了什麼問題。你能知道的就是在一些不知道的地方發生了你不知道的異常。因此,你沒法知道在當前這個函式處理異常合適,還是在更高一級的函式處理合適,你也不知道究竟處理這個異常是不是合適。注意異常處理不當會破壞你的程式,或造成其他型別的破壞。所以你應該盡量不使用預設的捕獲異常處理器。

然而,下面兩種情況下,使用預設的捕獲處理器是非常合適的:

●  處理器將重新丟擲同乙個異常,或丟擲另乙個異常。預設捕獲處理器經常用

於整理資源或重新丟擲異常。

●  異常處理器在任何情況下結束程序。

在析構函式裡不要丟擲異常,這通常會造成程序終止。我已經除錯過不只一次這種情況了。蹩腳的異常**反而會把程式弄得更糟糕。

異常宣告規範:

c++ 提供的異常宣告規範:

// 正常的函式宣告,可以丟擲任意的異常

void normalfunction();

// 不丟擲異常

void nothrowfunction throw();

// 只丟擲指定異常

class exceptionclass;

void throwfunction() throw (exceptionclass); // 包括exceptionclass 的派生型別。

mysql異常捕獲 mysql異常處理

error 1130 hy000 host 172.17.0.1 is not allowed to connect to this mysql server use mysql update user set host where user root flush privileges 解決辦法 進...

C 異常捕獲及處理

之前在刷 leetcode 時用到了異常處理,記錄一下。一般來說 c 的庫函式呼叫時,如果發生引數使用不當,或引數超限等,程式會直接丟擲異常而終止執行,但這並不是我們想要的結果,我們往往希望當出現異常時,再對異常進行特殊處理進而完善程式,使程式繼續執行。在 leetcode myatoi 一題中,要...

c 異常捕獲

概念 c 異常 就是 try catch seh異常 就是 try except 1 0 1 關於這兩種異常,如有不了解的地方,網上有很多資料可以參考 目前微軟所有的vc編譯器 從vc6到vc2010 都預設是開啟對c 異常的編譯支援的 位於專案選項中的 生成 啟用c 異常 ehsc,vc6是ena...