c++異常處理

<1>c++異常匹配規格是根據對象的靜態類型進行匹配的c++

<2>typedef void (*f)() throw(int) typedef 語句中不能有異常規格說明ide

<3>throw;向上級拋異常函數

throw x;拋出異常spa

1.使用異常說明:對象

   void foo(void) throw(MyException)/*異常說明,而且foo函數體中只能拋出異常說明中的異常*/{}//只拋出MyException異常資源

   void foo(void){}//拋出任何異常it

   void foo(void)throw(){}//不拋出異常io

   另外:若是一個函數拋出了一個在其異常說明中未被列出的異常,那麼std::unexpected()函數就會被調用。class

   它的缺省行爲是調用std::terminate()函數,然後者又會調用abort()函數;循環

2.異常能夠嵌套

3.若是函數的聲明有異常說明,那麼定義也須要有異常的說明

4.構造函數能夠拋出異常,並且不少場合以這種方式處理構造過程當中的錯誤會更簡單。

   可是要注意,拋異常前應該作必要的釋放資源工做,由於不徹底對象的析構函數是不會被調用的。

5.不要在析構函數中拋出異常,由於拋出異常會致使對象的析構(C語言中若是出錯可能會致使某些資源不能釋        放),這樣可能形成析構和拋出異常之間的死循環。

   若是在析構函數中有異常,應該在內部處理,不要拋出。

6.能夠不處理拋出的異常,而交給上一層調用者,即向上一層繼續拋出異常

7.示例:

class AppException {};

class SysException {};

throw AppException ();

throw SysException ();

try {


} catch (AppException& ex) {

   ex.what();

} catch (SysException& ex) {


}

8.注意__LINE__/__FILE__在自定義異常中的應用:

   throw MyExp (__FILE__, __LINE__);

9.不能拋出比基類虛函數更多的異常

相關文章
相關標籤/搜索