состояние std :: vector после std :: bad_alloc - PullRequest
4 голосов
/ 17 января 2012

Я пытаюсь найти онлайн-ссылку, чтобы увидеть исключительную безопасность нескольких стандартных контейнеров.

В случае std::vector Сохраняет ли он состояние, предшествующее вызову push_back? Я бы предположил, что вектор имеет все свои действующие объекты (деструкторы не вызывались). Какие гарантии предлагают std::vector после того, как push_back создает исключение std::bad_alloc?

1 Ответ

7 голосов
/ 17 января 2012

Если выбрасывает, вектор не изменяется.Даже не capacity().

Согласно [container.requirements.general]:

Если не указано иное (см. 23.2.4.1, 23.2.5.1, 23.3.3.4, и23.3.6.5) все типы контейнеров, определенные в этом разделе, отвечают следующим дополнительным требованиям:

[...]

- если исключение выдается функцией push_back () или push_front ()эта функция не имеет эффекта.

...