共用方式為


例外狀況: 捕捉和刪除例外狀況

以下的指示和範例示範如何攔截和刪除例外狀況。如需有關攔截,以及throw關鍵字,請參閱 C + + 例外處理

例外處理常式就必須刪除它們的處理,例外狀況物件,因為無法刪除的例外狀況會每次該程式碼會攔截例外狀況時,會造成記憶體流失。

攔截區塊必須刪除例外狀況時:

  • 攔截區塊擲回新例外狀況。

    當然,絕對不能刪除例外狀況擲回例外狀況相同一次,如果:

    catch(CException* e)
    {
       if (m_bThrowExceptionAgain)
          throw; // Do not delete e
       else 
          e->Delete();
    }
    
  • 執行會傳回與在攔截區塊。

注意事項注意事項

刪除時CException,使用刪除成員函式來刪除例外狀況。請不要使用刪除關鍵字,因為它可能會失敗,如果例外狀況不是在堆積上。

若要補捉和刪除例外狀況

  • 使用 關鍵字來設定 區塊。執行任何程式陳述式,可能會擲回例外狀況中的, 區塊。

    使用攔截 關鍵字來設定 攔截區塊。將例外處理程式碼放在攔截區塊。中的程式碼攔截 時,才執行區塊內的程式碼 區塊擲回例外狀況,在指定的型別 攔截陳述式。

    下列基本架構所示如何攔截區塊通常會排列:

    try
    {
       // Execute some code that might throw an exception.
       AfxThrowUserException();
    }
    catch( CException* e )
    {
       // Handle the exception here.
       // "e" contains information about the exception.
       e->Delete();
    }
    

    擲回例外狀況時,控制權會傳遞至第一個攔截區塊的例外狀況宣告符合例外狀況的型別。您可以選擇性地處理不同類型的例外狀,以及循序攔截會封鎖,如下所示:

    try
    {
       // Execute some code that might throw an exception.
       AfxThrowUserException();
    }
    catch( CMemoryException* e )
    {
       // Handle the out-of-memory exception here.
       e->Delete();
    }
    catch( CFileException* e )
    {
       // Handle the file exceptions here.
       e->Delete();
    }
    catch( CException* e )
    {
       // Handle all other types of exceptions here.
       e->Delete();
    }
    

如需詳細資訊,請參閱的例外狀況: 從 MFC 例外巨集轉換

請參閱

概念

在 MFC 中處理的例外狀況