91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用C++異常處理中系統函數terminate的調用

發布時間:2020-07-16 10:37:31 來源:億速云 閱讀:242 作者:Leah 欄目:編程語言

如何使用C++異常處理中系統函數terminate的調用?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

                                                           C++中處理異常的過程是這樣的:在執行程序發生異常,可以不在本函數中處理,而是拋出一個錯誤信息,把它傳遞給上一級的函數來解決,上一級解決不了,再傳給其上一級,由其上一級處理。如此逐級上傳,直到最高一級還無法處理的話,運行系統會自動調用系統函數terminate,

學會使用terminate函數有助于異常處理

一 當一個異常產生的時候調用terminate函數,代碼:

  1. [cpp] view plaincopyprint?
    #include <iostream>   
    #include <exception>   
    using namespace std;  
    void on_terminate(){  
    cout<<"terninate function called!"<<endl;  
     cin.get();  
    }  
    int main(void){  
     set_terminate(on_terminate);  
     throw exception();  
     cout<<"terminate function not called!"<<endl;  
     cin.get();  
    return 0;  
    }

terminate被調用的情況:

1 當發送一個異常,并且構造函數產生異常
2 當發送一個異常,或者析構函數產生異常
3 一個靜態對象的構造或者析構發送一個異常
4 以atexit注冊的函數發生異常的時候
5 自定義一個異常,但是實際上沒有異常產生的時候
6 調用缺省的unexcepted()函數時候
例子說話:

  1. [cpp] view plaincopyprint?
    #include <iostream>   
    #include <exception>   
    using namespace std;  
    void on_terminate(){  
    cout<<"terminate function called!"<<endl;  
    cin.get();  
    }  
    class custom_exception{  
     custom_exception(){  
     }  
    custom_exception(const custom_exception& excep){  
     throw exception();  
     }  
    };  
    void case_1(){  
    try{  
      throw custom_exception();  
    }  
     catch(...){  
     }  
    }

    當一個函數拋出了一個throw異常的時候,如果該函數內部構造了對象的話,系統會先對該對象調用析構函數,當對象調用完了析構函數以后,才開始執行異常的拋出工作。

同時在具有繼承關系的類的異常中,子類的異常應該放在前面,而基類的異常應該放到最后面,這樣可以使子類的異常先獲得處理,父類的異常最后處理。

  1. [cpp] view plaincopyprint?
    #include<iostream>    
    using namespace std;   
    class X   
    {   
    public:   
     class Trouble {};   //注意:類中嵌套類的申明和定義,學習!!!    
      class small: public Trouble {};   
      class big:public Trouble {};//類中的繼承!!!    
     void f(){   
     throw big();   
     }   
    };   
    int main()   
    {   
      X x;   
     try{   
       x.f();   
      }   
     catch(X::Trouble &)   
      {   
       cout<<"caught Trouble"<<endl;   
      }   
      catch(X::small&)   
      {   
        cout<<"caught small"<<endl;  
     }   
      catch(X::big&)   
      {   
      cout<<"caught big"<<endl;   
      }   
       return 0;   
    }

    如果這樣的話,拋出的big()類型異常則被trouble類壟斷,應該倒著寫才可以實現順序捕獲所有異常,另外使用...可以捕捉所有的異常,這個應該放到最后面才可以。

省略號異常處理器不允許接受任何參數,所以無法得到任何相關異常的信息,也無法知道異常的類型,這種catch語句經常用于清理資源并重新拋出所捕獲的異常。

關于如何使用C++異常處理中系統函數terminate的調用問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

商都县| 三原县| 安义县| 临猗县| 宿迁市| 嵩明县| 桑日县| 长宁县| 抚顺市| 达孜县| 东丰县| 湟源县| 瑞昌市| 甘肃省| 乐山市| 阿鲁科尔沁旗| 花莲县| 乐昌市| 留坝县| 西乌珠穆沁旗| 易门县| 洱源县| 张家口市| 泗阳县| 于都县| 丰顺县| 财经| 固安县| 陈巴尔虎旗| 滕州市| 绥芬河市| 宿迁市| 东乡族自治县| 东港市| 子洲县| 德庆县| 亳州市| 大庆市| 固原市| 建始县| 清河县|