簡體   English   中英

C ++異常處理被析構函數阻止

[英]C++ Exception handling blocked by destructor

我最近在使用幾個第三方庫時遇到了一個問題。 我的代碼稱為庫A,又稱為庫B。庫B遇到錯誤時,將引發異常; 這是首選行為,因為它不知道應如何處理錯誤。 庫A將使用其虛擬析構函數中的RAII清理其內部資源。

由於這些資源是A中班級的私有資源,因此我無法提前清理資源。

現在,在某種情況下,在清理我在代碼中使用的類時,將調用A中的析構函數。 然后依次稱為B和B將引發異常。

我想在我的代碼中捕獲此異常,因為我不想更改第三方庫的代碼。 不幸的是,我發現異常處理代碼不會將異常傳播回我的代碼,而是會導致調用abort方法。

我最終更改了A的第三方代碼,以捕獲並忽略所有可能的異常。

由於默認情況下,gcc 4.8.1不會通過析構函數傳播異常,因此哪些主要編譯器和這些編譯器的版本會通過析構函數傳播異常,也不會傳播異常?

我確實相信它是在標准中的某個地方定義的,至少在C ++ 11中,從析構函數引發的異常可能導致std::terminate被調用。 這是因為編譯器將析構函數隱式標記為noexcept

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM