4 votes

État de std::vector après std::bad_alloc

Je suis en train de chercher une référence en ligne pour voir la sûreté des exceptions de plusieurs conteneurs std.

Dans le cas de std::vector, Est-ce qu'il conserve l'état précédent à l'appel de push_back? Je présumerais que le vecteur a tous ses objets toujours valides (aucun destructeur invoqué). Quelles garanties offre std::vector après que push_back lance une exception std::bad_alloc?

7voto

ybungalobill Points 31467

Si elle jete, le vecteur n'est pas modifié. Même pas la capacity().

Conformément à [container.requirements.general]:

Sauf indication contraire (voir 23.2.4.1, 23.2.5.1, 23.3.3.4 et 23.3.6.5) tous les types de conteneurs définis dans cette clause respectent les exigences supplémentaires suivantes:

[...]

— si une exception est lancée par une fonction push_back() ou push_front(), cette fonction n'a aucun effet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X