Я сталкивался с этим термином исключение безопасности контейнеров. Я хочу понять, что именно означает исключение безопасности?
Есть ли какое-то сравнение для разных контейнеров?
Если вы посмотрите на алгоритмы для различных структур данных, вы увидите, что они включают последовательность шагов. Структура данных имеет некоторую целостность (непротиворечивый внутренний смысл) в начале шагов и в конце.
Например, рассмотрим vector
, который включает в себя динамически растущий массив. Обычно это включает в себя массив, целое число, описывающее размер массива, и целое число, описывающее количество используемых элементов. При вставке элемента может быть выделен новый массив в два раза больше, элементы скопированы в новый, целое число, описывающее размер, будет умножено на два, целое число, описывающее количество используемых элементов, будет увеличено на 1 и т. Д. ,
Исключение, выданное в этой точке (например, конструктором копирования элементов), может привести к завершению последовательности шагов в середине. Например, если вы сначала небрежно обновите целые числа, только затем выполните выделение и копирование (и не перехватываете исключения), тогда структура данных потеряет свою внутреннюю согласованность.
Значение исключительная безопасность для контейнеров STL заключается в том, что они гарантируют, что такие завершения оставят структуру данных в согласованном состоянии.
Других решений пока нет …