Операции над векторами. Обработка исключений

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

   
Проверка логических ошибок в векторах сведена к минимуму. Согласно стандарту, исключения генерирует только одна функция at() -
безопасная версия оператора индексирования (смотри 134 шаг). Кроме того, стандарт требует, чтобы
происходили только стандартные исключения - такие, как bad_alloc при нехватке памяти, или исключения при выполнении
пользовательских операций.

   
Если функции, вызванные вектором (функции, определенные при определении типа элемента или переданные пользователем), инициируют
исключения, стандартная библиотека C++ гарантирует следующее.

  • Если исключение происходит при вставке элемента функцией push_back(), эта функция не вносит изменений в контейнер.
  • Если операции копирования (копирующий конструктор и оператор присваивания) не генерируют исключений, то функция insert()
    либо выполняется успешно, либо не вносит изменений.
  • Функция pop_back() не генерирует исключений.
  • Если операции копирования (копирующий конструктор и оператор присваивания) не генерируют исключений, то функции erase() и
    clear() тоже не генерируют исключений.
  • Функция swap() не генерирует исключений.
  • Если используемые элементы не генерируют исключений во время операций копирования (копирующий конструктор и оператор
    присваивания), то любая операция либо выполняется успешно, либо не вносит изменений в контейнер. Такими элементами могут быть
    "обычные данные", то есть типы, не использующие специальные возможности C++. Например, любая простая структура С относится к "обычным данным".

   
Все перечисленные гарантии основаны на том, что деструкторы не генерируют исключения. На 121 шаге
приведены общие сведения об обработке исключений в STL.

   
На следующем шаге мы рассмотрим еще один пример использования векторов.



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

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