una tener para numero metadescription medidor maximos description debe cuantos contar contador caracteres insert stdmap

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.