C++異常:exception


基本知識

下圖表示了標准異常的繼承關系

exception是所有標准異常的基類,自定義異常也需要繼承exception,如下例:

 1 #include "pch.h"
 2 #include <iostream>
 3 
 4 using namespace std;
 5 
 6 struct MyException:public exception {
 7     const char* what()const throw(){
 8         return "這是我自定義的異常類!";
 9     }
10 };
11 
12 int main(){
13     try {
14         throw MyException();
15     }
16     //catch (...) {
17     //    cout << "捕獲所有異常" << endl;
18     //}
19     catch (MyException& ex) {
20         cout << "捕獲自定義異常 MyException :" << ex.what() << endl;
21     }
22 }

注意:第7行中的 const throw() 是異常規格說明,這里表示這個函數內部不會拋出異常。如果改成 const throw(A) 則表示這個函數可能會拋出A類異常。

注意:第16-18的注釋行,這個捕獲塊會捕獲所有異常,其后面的異常會被屏蔽,所以不能在它后面再添加新的塊,可以在前面添加,相當於switch語句的default。

 

關於構造函數異常(參考文章

在構造函數中發生異常會導致對象無法被創建,經典解決方案是使用使用STL的標准類auto_ptr,或者在構造函數中給成員賦值為null,然后構造函數調用init函數來進行一些容易出錯的操作,如果拋出異常則在構造函數中捕獲並調用uinit來釋放已經分配的內存。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM