www.adept7.kiev.ua
| Форум| Гостевая| Ссылки| Программы| Исходные тексты| Наши партнеры.|
   
| Главная| Рассылки| Услуги| Библиотека| Новости| Авторам| Программистам| Студентам|
delphi c++ assembler
  http://tikitak.narod.ru ---- Главная страница сайта

Шаг 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;
Да, напоследок механизм исключений автоматически уничтожает оконные объекты. Это где-то в книге мне попадалось только не помню в какой.


Предыдущий Шаг | Следующий Шаг | Оглавление

By Artem.
Используются технологии uCoz
 

Rambler's Top100 Rambler's Top100

©  Adept Design Studio

Используются технологии uCoz