2012-01-17 3 views
4

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

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

ответ

7

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

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

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

[...]

- если исключение на push_back() или функцию push_front(), эта функция не имеет никакого эффекта.