insert - tener - Para std:: map, ¿cómo se comportará la inserción si tiene que cambiar el tamaño del contenedor y la memoria no está disponible?
medidor de meta description (3)
Para std :: map, ¿cómo se comportará la inserción si tiene que cambiar el tamaño del contenedor y la memoria no está disponible?
El mapa STL no tiene que "cambiar el tamaño" del contenedor. el mapa (como la lista) es un contenedor basado en nodos; cada inserción asigna memoria.
Dicho esto, la situación de falta de memoria se maneja como cualquier otra situación de falta de memoria en C ++: arroja un std :: bad_alloc. Los contenedores STL con asignadores predeterminados no hacen nada sofisticado, todos terminan asignándose de alguna manera a través de operadores nuevos / eliminados estándar.
En el caso del mapa de STL, arrojará una excepción y se comportará como si no se hubiera llamado. Es decir, el contenedor permanecerá sin modificaciones.
Nuevo lanzará una excepción. Tan fácil como eso.
La inserción no ocurrirá, y tampoco se modificará o se dañará el contenido del diccionario.
Para expandir la respuesta de Nils (sí se lanzará), pero lo que sucede cuando arroja es a veces confuso en la especificación.
En 17.2.2 de la especificación (con respecto a los mapas / excepciones), si inserta () arroja, esa función no tiene ningún efecto. Esta es una gran garantía para el mapa. Esto difiere de los contenedores que utilizan la asignación contigua como vector o deque.