Исключения. Перехват и удаление исключений
Следующие инструкции и примеры показывают, как перехватывать исключения и удаления. Дополнительные сведения о try, catch и ключевые слова throw см. в разделе Обработка исключений C++.
Обработчики исключений удалять объекты они обрабатывают исключения, поскольку сбой удаления исключение приведет к утечки памяти, когда этот код перехватывает исключение.
В блоке 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.