Глава 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 о провоцируется исключительная ситуация, программа вызывает деструктор объекта нод. Этот аспект обработки исключительных ситуаций другие средства борьбы с ошибками просто не