Обработка ошибок и исключений. Члены классов исключений

   
На этом шаге мы рассмотрим члены классов исключений.

   
Обработка исключений в секциях catch обычно производится через интерфейс исключений.
Интерфейс всех стандартных классов исключений состоит из единственной функции what(). Функция
возвращает дополнительную информацию (помимо типа исключения) в виде строки, завершенной нулевым байтом:

namespace std {
  class exception { 
    public: 
      virtual const char* what() const throw();
      .    .    .    .    .
  };
}

   
Содержимое строки определяется реализацией. В частности, это может быть строка с многобайтовой кодировкой, завершенная
нулем, интерпретируемая как wstring. Строка, возвращаемая функцией what(), продолжает существовать
вплоть до уничтожения объекта исключения, от которого она была получена.

   
Примечание.
Время жизни возвращаемого значения what() в исходном стандарте не оговорено. Для решения проблемы было
внесено специальное предложение.

   
Остальные члены стандартных классов исключений предназначены для создания, копирования, присваивания и уничтожения
объектов исключений. Стандартные классы не имеют членов, содержащих дополнительную информацию об исключении
(помимо функции what()). Например, не существует переносимых средств для получения информации о
контексте исключения или неверного индекса при ошибке выхода из интервала. Переносимые возможности обработки
дополнительной информации фактически ограничиваются выводом сообщения, полученного от what():

try {
 .    .    .    .
}
catch (const std::exception& error) {
  // Вывод сообщения об ошибке, определяемого реализацией 
  std::cerr << error.what() << std::endl;
   .    .    .    .
}

   
Единственным источником информации об исключении, помимо функции what(), является конкретный тип
исключения. Например, при обработке исключения bad_alloc программа может попытаться выделить дополнительную память.

   
На следующем шаге мы рассмотрим генерирование стандартных исключений.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий