C++異常處理(try語句的使用,異常的傳播,棧展開)

來源:互聯網
上載者:User

標籤:set   異常   嵌套使用   一般來說   try   let   預設   拷貝建構函式   拋出異常   

try塊可以嵌套使用,當try內部模組中為捕獲到異常時,傳播到外部捕獲。當內層已經捕獲異常時,將不再傳播到外層。當需要傳播到外層時,需要內部捕獲該異常後,重新再拋出異常,就可以傳播到外面。注意重新拋出異常的時候會調用拷貝建構函式。

當異常均未被捕獲時,將調用terminate函數,terminate函數預設調用系統的abort()函數終止進程。可以用set_terminate函數設定terminate調用的函數。

棧展開的定義是,沿著嵌套調用連結向上尋找,直至為異常找到一個catch子句。這個過程稱之為棧展開。在棧展開的過程中,會為生產的局部對象調用解構函式。

建構函式中可以拋出異常,拋出異常時應消除已構造的對象(如已構造一個obj = new Obj,就要保證delete掉這個new出來的對象)。由於構造未完成,所以不會調用解構函式。

 

注意:拋出異常的時候,就會調用解構函式,而不是捕獲異常的時候,在main中拋出異常後,在這個異常未被捕獲之前,在調用解構函式又拋出異常,此時就會調用terminate函數。這樣拋出異常就沒有意義了,所以一般來說不應在解構函式中拋出異常。

C++異常處理(try語句的使用,異常的傳播,棧展開)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.