解釋c++未捕獲異常的影響
發表時間:2024-01-06 來源:明輝站整理相關軟件相關文章人氣:
[摘要]C++ 標準不指定程序在遇到未捕獲異常時的行為。在一些系統中,遇到這種情況的結果是顯示完整的堆棧跟蹤,也就意味著在程序結束之前自動對象會正確地銷毀。而在另外一些系統中,未捕獲異常會導致程序直接結束,而不會銷毀自動對象。 這種回旋余地是不一致的;解決用戶需要與供應商需要之間的沖突導致了這一現象...
C++ 標準不指定程序在遇到未捕獲異常時的行為。在一些系統中,遇到這種情況的結果是顯示完整的堆棧跟蹤,也就意味著在程序結束之前自動對象會正確地銷毀。而在另外一些系統中,未捕獲異常會導致程序直接結束,而不會銷毀自動對象。
這種回旋余地是不一致的;解決用戶需要與供應商需要之間的沖突導致了這一現象的產生。在某些調試環境中,在遇到未捕獲異常時避免析構對象是必要的,因為它能夠讓用戶在程序終止之前恢復執行。相反,在一些硬件架構中,如果不同時正確地銷毀對象,那么展開堆棧幾乎不可能做到。
因為這是一個平臺相關的行為,所以程序員就要分析在他們的系統在出現未捕獲異常時的行為。更重要的是,如果我們的代碼將在運行在多個平臺之上,那么我們需要在 main() 函數中使用一個 catch(. . .) 代碼塊來保證程序行為在不同平臺下的一致性。
int main()
{
try
{
f();
}
catch(DerivedEx& d) //handle most derived exception first
{}
catch(BaseEx& e)
{}
catch(...) //no exception is left uncaught
{}
}
這樣就保證了不會出現未捕獲的異常。