Бьерн Страуструп. Язык программирования С++ Второе дополненное издание



Pdf көрінісі
бет177/256
Дата11.07.2022
өлшемі2,87 Mb.
#37591
1   ...   173   174   175   176   177   178   179   180   ...   256
9.4.4 Особые ситуации и конструкторы 
Особые ситуации дают средство сигнализировать о происходящих в конструкторе ошибках. Поскольку 
конструктор не возвращает такое значение, которое могла бы проверить вызывающая функция, есть 
следующие обычные (т.е. не использующие особые ситуации) способы сигнализации
[1] Возвратить объект в ненормальном состоянии в расчете, что пользователь проверит его 
состояние. 
[2] Установить значение нелокальной переменной, которое сигнализирует, что создать объект не 
удалось. 
Особые ситуации позволяют тот факт, что создать объект не удалось, передать из конструктора вовне: 
Vector::Vector(int size) 

if (sz<0 || max// 
... 

В функции, создающей вектора, можно перехватить ошибки, вызванные недопустимым размером 
(Size()) и попытаться на них отреагировать: 
Vector* f(int i) 

Vector* 
p; 
try 

p = new Vector v(i); 

catch (Vector::Size) { 
// реакция на недопустимый размер вектора 

// 
... 
return 
p; 

Управляющая созданием вектора функция способна правильно отреагировать на ошибку. В самом 
обработчике особой ситуации можно применить какой-нибудь из стандартных способов диагностики и 
восстановления после ошибки. При каждом перехвате особой ситуации в управляющей функции может 
быть свой взгляд на причину ошибки. Если с каждой особой ситуацией передаются описывающие ее 
данные, то объем данных, которые нужно анализировать для каждой ошибки, растет. Основная задача 
обработки ошибок в том, чтобы обеспечить надежный и удобный способ передачи данных от исходной 
точки обнаружения ошибки до того места, где после нее возможно осмысленное восстановление. 
Способ "запроса ресурсов путем инициализации" - самый надежное и красивое решение в том случае, 
когда имеются конструкторы, требующие более одного ресурса. По сути он позволяет свести задачу 
выделения нескольких ресурсов к повторно применяемому, более простому, способу, рассчитанному на 
один ресурс. 


Бьерн Страуструп.
Язык программирования С++ 
 
249 


Достарыңызбен бөлісу:
1   ...   173   174   175   176   177   178   179   180   ...   256




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет