Шаг 138.
Библиотека STL.
Контейнеры STL. Операции над векторами. Обработка исключений
На этом шаге мы рассмотрим обработку исключений в отношении к векторам.
Проверка логических ошибок в векторах сведена к минимуму. Согласно стандарту, исключения генерирует только одна функция at() -
безопасная версия оператора индексирования (смотри 134 шаг). Кроме того, стандарт требует, чтобы
происходили только стандартные исключения - такие, как bad_alloc при нехватке памяти, или исключения при выполнении
пользовательских операций.
Если функции, вызванные вектором (функции, определенные при определении типа элемента или переданные пользователем), инициируют
исключения, стандартная библиотека C++ гарантирует следующее.
- Если исключение происходит при вставке элемента функцией push_back(), эта функция не вносит изменений в контейнер.
- Если операции копирования (копирующий конструктор и оператор присваивания) не генерируют исключений, то функция insert()
либо выполняется успешно, либо не вносит изменений.
- Функция pop_back() не генерирует исключений.
- Если операции копирования (копирующий конструктор и оператор присваивания) не генерируют исключений, то функции erase() и
clear() тоже не генерируют исключений.
- Функция swap() не генерирует исключений.
- Если используемые элементы не генерируют исключений во время операций копирования (копирующий конструктор и оператор
присваивания), то любая операция либо выполняется успешно, либо не вносит изменений в контейнер. Такими элементами могут быть
"обычные данные", то есть типы, не использующие специальные возможности C++. Например, любая простая структура С относится к "обычным данным".
Все перечисленные гарантии основаны на том, что деструкторы не генерируют исключения. На 121 шаге
приведены общие сведения об обработке исключений в STL.
На следующем шаге мы рассмотрим еще один пример использования векторов.
Предыдущий шаг
Содержание
Следующий шаг