C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  Update World C++: Сборник GPL QT исходников
  Весь сайт целиком можно загрузить по ссылкам из раздела Скачать

 99 - Как обрабатывать исключения / MFC шаг за шагом / Visual C++

Шаг 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;

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


| |
Автор Каев Артем.
[AD]