Глава 22. Обработка исключительных ситуаций _ 597
читальной ситуации (raising an exception). В этом простом примере исключительная ситуация, которую генерирует программа, имеет форму обычного целого числа (Errorcode); однако, как вы позже увидите, программы могут генерировать фактически любой тип исключительной ситуации.
Листинг 22.8 демонстрирует небольшую модификацию этого примера. Посмотрите, сможете ли вы угадать, что выведет эта программа.
// Необходимые заголовки
#include <limits.h>
#include <iostream.h>
class MyMemoryHogClass { public:
-MyMemoryHogClass() (
cout « "Деструктор в MyMemoryHogClass.\n"; }
};
»
unsigned short Add(unsigned short addendl, unsigned short addend2) {
MyMemoryHogClass Hog;
unsigned long sum = addendl + addend2;
if (suiri > USHRT_MAX) throw 1 ;
return (unsigned short) sum;
}
void main() (
try {
unsigned short Result = Add(12345, 54321);
cout « "Ответ равен " « Result « "\n";
i
catch (int ErrorCode) {
cout « "Переполнение! ErrorCode = " « ErrorCode « "\n";
>
mainO та же самая, что и в листинге 22.7
Если вы запустите этот пример, то получите что-то вроде следующего:
Деструктор в MyMemoryHogClass. ;
Переполнение! t^rrorCode = 1
Как видите, когда в функции Add о провоцируется исключительная ситуация, программа вызывает деструктор объекта нод. Этот аспект обработки исключительных ситуаций другие средства борьбы с ошибками просто не