Исключения: Улавливающ и удаление исключения
Следующие инструкции и примерах показано, как перехватывать исключения и удаления.Дополнительные сведения о 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.