Поделиться через


Исключения: Улавливающ и удаление исключения

Следующие инструкции и примерах показано, как перехватывать исключения и удаления.Дополнительные сведения о try, catch и ключевые слова throw см. в разделе Обработка исключений С++.

Обработчики исключений должны удалять объекты исключений они обрабатывают, поскольку сбой удаления исключение вызывает утечку памяти, когда код перехватывает исключение.

Этот блок catch должен удалять исключение, если:

  • Блок catch создает новое исключение.

    Конечно, не следует удалять бросаете исключение, если одно и то же исключение еще раз.

    catch(CException* e)
    {
       if (m_bThrowExceptionAgain)
          throw; // Do not delete e
       else 
          e->Delete();
    }
    
  • Возвращает catch выполнение внутри блока.

ПримечаниеПримечание

При удалении CException, используйте функции-члена Удалить для удаления исключение.Не используйте ключевое слово удалить, поскольку оно может завершиться ошибкой, если исключение не на куче.

Перехватывать исключения и удаление

  • Используйте ключевое слово try для настройки блок try.Выполните все выписки программы, которые могут вызвать исключение в пределах блока try.

    Используйте ключевое слово catch для настройки блок catch.Код обработки ошибок размещения в блоке catch.Код в блоке catch выполняется только в том случае, если код внутри блока try вызывает исключение типа, указанного в catch выписке.

    В основу показано, как try и блоки catch обычно располагаются:

    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