|
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
|