Pour std :: map, comment se comportera l'insert s'il doit redimensionner le conteneur et que la mémoire n'est pas disponible?

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

  •  01-07-2019
  •  | 
  •  

Question

Pour std :: map, comment se comportera l'insert s'il doit redimensionner le conteneur et que la mémoire n'est pas disponible?

Était-ce utile?

La solution

La carte STL ne doit pas nécessairement "redimensionner". récipient. map (tout comme list) est un conteneur basé sur un nœud; chaque insertion alloue de la mémoire.

Cela dit, la situation de mémoire insuffisante est gérée de la même manière que toute autre situation de mémoire insuffisante en C ++: elle renvoie std :: bad_alloc. Les conteneurs STL avec des allocateurs par défaut ne font rien de fantaisiste, ils finissent tous par allouer via des opérateurs standard nouveaux / supprimer en quelque sorte .

Dans le cas d'une carte STL, il lancera une exception et se comportera sinon comme s'il n'avait pas été appelé. Autrement dit, le conteneur ne sera pas modifié.

Autres conseils

New lancera une exception. Aussi simple que ça.

L'insertion n'aura pas lieu et le contenu du dictionnaire ne sera ni modifié ni corrompu.

Pour développer la réponse de Nils (oui, il lancera), mais ce qui se produit quand il jette est parfois déroutant dans les spécifications.

Dans 17.2.2 de la spécification (concernant les cartes / exceptions), si insert () renvoie, cette fonction est sans effet. C'est une garantie forte pour la carte. Ceci diffère des conteneurs utilisant une allocation contiguë comme vector ou deque.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top