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?

StackOverflow https://stackoverflow.com/questions/104483

  •  01-07-2019
  •  | 
  •  

Pregunta

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?

¿Fue útil?

Solución

El mapa STL no tiene que "cambiar el tamaño" del contenedor.map (al igual que list) 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 a través de operadores estándar de nueva/eliminación. de alguna manera.

En el caso del mapa STL, generará una excepción y, de lo contrario, se comportará como si no hubiera sido llamado.Es decir, el contenedor permanecerá sin modificar.

Otros consejos

Nuevo generará una excepción.Así de fácil.

La inserción no se producirá y tampoco se modificará ni corromperá el contenido del diccionario.

Para ampliar la respuesta de Nils (sí, arrojará), pero lo que sucede cuando arroja a veces es confuso en la especificación.

En 17.2.2 de la especificación (con respecto a mapas/excepciones), si se lanza insert(), esa función no tiene ningún efecto.Esta es una fuerte garantía para el mapa.Esto difiere de los contenedores que utilizan asignación contigua como vector o deque.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top