Шаг 99 - Как обрабатывать исключения

Естественно, что исключения нарушает нормальный ход программы и к этому надо быть готовым заранее. Главный принцип это обрабатывать исключения локально. Смотрите пример.

void MyFuct()
{
 CPen *cp=new CPen(255,0,0)
 // --- код ----
 ......
  ИСКЛЮЧЕНИЕ
 ......
 // ------------- 
 delete cp;
}
В данном примере при появлении исключения память выделенная переменной cp не будет освобождена !!!. При вызове исключения обработка будет передана куда-то дальше в обработчик и работа функции не будет завершена. Поэтому при исключении delete не будет вызван. Давайте изменим код ближе к правильному.
void MyFuct()
{
 CPen *cp=new CPen(255,0,0)
 try
 {
 // --- код ----
 ......
  ИСКЛЮЧЕНИЕ
 ......
 // ------------- 
 }
 catch(CException* e)
 {
  e->Delete();
 }
 delete cp;
}
Здесь мы вроде как всё предусмотрели. И объект удалили и исключение обработали и удалили. Что делать если исключение Вы не хотите обрабатывать локально ? Вот некоторый выход.
........
catch(CException* e)
 {
  delete cp;
  throw;
 }
 delete cp;

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


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 6.02.2000