明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

解釋c++未捕獲異常的影響

[摘要]C++ 標(biāo)準(zhǔn)不指定程序在遇到未捕獲異常時(shí)的行為。在一些系統(tǒng)中,遇到這種情況的結(jié)果是顯示完整的堆棧跟蹤,也就意味著在程序結(jié)束之前自動(dòng)對(duì)象會(huì)正確地銷毀。而在另外一些系統(tǒng)中,未捕獲異常會(huì)導(dǎo)致程序直接結(jié)束,而不會(huì)銷毀自動(dòng)對(duì)象。 這種回旋余地是不一致的;解決用戶需要與供應(yīng)商需要之間的沖突導(dǎo)致了這一現(xiàn)象...

    C++ 標(biāo)準(zhǔn)不指定程序在遇到未捕獲異常時(shí)的行為。在一些系統(tǒng)中,遇到這種情況的結(jié)果是顯示完整的堆棧跟蹤,也就意味著在程序結(jié)束之前自動(dòng)對(duì)象會(huì)正確地銷毀。而在另外一些系統(tǒng)中,未捕獲異常會(huì)導(dǎo)致程序直接結(jié)束,而不會(huì)銷毀自動(dòng)對(duì)象。

    這種回旋余地是不一致的;解決用戶需要與供應(yīng)商需要之間的沖突導(dǎo)致了這一現(xiàn)象的產(chǎn)生。在某些調(diào)試環(huán)境中,在遇到未捕獲異常時(shí)避免析構(gòu)對(duì)象是必要的,因?yàn)樗軌蜃層脩粼诔绦蚪K止之前恢復(fù)執(zhí)行。相反,在一些硬件架構(gòu)中,如果不同時(shí)正確地銷毀對(duì)象,那么展開堆棧幾乎不可能做到。

    因?yàn)檫@是一個(gè)平臺(tái)相關(guān)的行為,所以程序員就要分析在他們的系統(tǒng)在出現(xiàn)未捕獲異常時(shí)的行為。更重要的是,如果我們的代碼將在運(yùn)行在多個(gè)平臺(tái)之上,那么我們需要在 main() 函數(shù)中使用一個(gè) catch(. . .) 代碼塊來保證程序行為在不同平臺(tái)下的一致性。

    int main()
    {
      try
      {
        f();
      }
     catch(DerivedEx& d) //handle most derived exception first
      {}
     catch(BaseEx& e)  
     {}
     catch(...) //no exception is left uncaught
     {}
   }

    這樣就保證了不會(huì)出現(xiàn)未捕獲的異常。