异常:捕获和删除异常

下面的说明和示例演示如何捕获和删除异常。 有关 try的更多信息, catch和 throw 关键字,请参见 C++ 异常处理

您的异常处理程序必须删除异常对象,它们处理,因为无法删除异常会导致内存泄漏,只要该代码捕获异常。

您的 catch 块必须删除异常,则:

  • catch 块引发新异常。

    当然,因此,如果您再次引发,同一异常不能删除异常:

    catch(CException* e)
    {
       if (m_bThrowExceptionAgain)
          throw; // Do not delete e
       else 
          e->Delete();
    }
    
  • 执行返回从 catch 的内部块。

备注

在删除 CException时,请使用 删除 成员函数删除异常。不要使用关键字, delete ,因为它可能失败,则异常不能在堆。

捕获和删除异常

  • 使用 try 关键字设置 try 块。 执行可能引发异常。 try 中的异常块的所有过程语句。

    使用 catch 关键字设置 catch 块。 将异常处理代码在 catch 块。 在 catch 的代码块执行,仅当在 try 中的代码块该类型的异常。 catch 语句中指定的引发。

    下列主干显示 trycatch 块如何通常是位置:

    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();
    }
    

    引发异常时,对异常声明与异常类型的第一 catch 的控件通过阻塞。 您可以有选择地将异常的不同类型与顺序 catch 的块如下面所列的处理:

    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