Читать «Полный справочник по С++» онлайн - страница 424

Герберт Шилдт

Вызывает обработчик неперехваченной и неисправимой ошибки. По умолчанию вызывает функцию abort ()

Возвращает значение true, если исключительная ситуация не была перехвачена

Вызывает обработчик непредвиденной исключительной ситуации, если функция сгенерировала непредусмотренную исключительную ситуацию. По умолчанию вызывает функцию terminate ()

Заголовок <stdexcept>

В заголовке <stdexcept> определены несколько стандартных исключительных ситуаций, генерируемых библиотечными функциями или системой поддержки выполнения программ (run-time system). В заголовке <stdexcept> определены два вида исключительных ситуаций: логические ошибки и ошибки, возникающие при выполнении программ (run-time errors). Логические ошибки — результат неправильного программирования. Ошибки, возникающие при выполнении программ, являются следствием неверной работы библиотечных функций или операционной системы и не могут контролироваться программ истом.

Стандартные исключительные ситуации, порождаемые логическими ошибками, описываются классами, производными от класса logic_error.

Исключительная ситуацияСмысл
domainerrorВыход за пределы допустимого диапазона значений.
invalid_argumentПри вызове функции указан неверный аргумент.
length_errorПопытка создать слишком крупный объект.
out_of_rangeАргумент функции выходит за пределы допустимого диапазона значений.
Исключительные ситуации, перечисленные ниже, являются производными от ба
зового класса nmtime_error.
Исключительная ситуацияСмысл
overflow_errorПереполнение при выполнении арифметических операций.
range_errorВыход за пределы допустимого диапазона.
underflow_errorПотеря значимости.

Класс auto_ptr, объявленный в заголовке <memory>, весьма интересен. Объект этого класса является указателем, имеющим право владения объектом, на который он ссылается. Это право можно передать другому объекту класса auto_ptr, однако некоторые объекты владеют объектами вечно. Эта схема гарантирует правильное уничтожение динамических объектов при любых обстоятельствах с помощью деструкторов самих объектов. Например, когда один объект класса auto_ptr присваивается другому, право владения объекта переходит левому операнду оператора присваивания. При уничтожении указателей объект, на который они ссылаются, уничтожается лишь один раз, а именно: когда уничтожается указатель, имеющий право владения данным объектом. Одно из преимуществ такого подхода заключается в том, что он позволяет уничтожать динамические объекты в ходе обработки исключительных ситуаций.

Шаблонная спецификация класса auto_ptr приведена ниже.

| template cclass Т> class auto_ptr;

Здесь класс т представляет собой тип указателя, хранящегося в объекте класса auto_ptr.

Класс auto_ptr имеет следующие конструкторы.

I explicit auto_ptr(T* ptr = 0) throwt); auto_ptr(auto_ptr &nb) throwt);

template cclass T2> auto_ptr(auto_ptrcT2> &ob) throwt);

Первый конструктор создает объект класса auto_ptr, ссылающийся на объект, заданный параметром ptr. Второй конструктор создает копию объекта класса auto_ptr, заданного параметром ob, и передает новому объекту право владения. Третий конструктор преобразует объект ob в экземпляр класса т (если этой возможно) и передает ему право владения.