Per std :: map, come si comporterà l'inserimento se deve ridimensionare il contenitore e la memoria non è disponibile?

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

  •  01-07-2019
  •  | 
  •  

Domanda

Per std :: map, come si comporterà l'inserimento se deve ridimensionare il contenitore e la memoria non è disponibile?

È stato utile?

Soluzione

La mappa STL non deve " ridimensionare " contenitore. map (proprio come list) è un contenitore basato su nodi; ogni inserto alloca la memoria.

Detto questo, la situazione di memoria insufficiente viene gestita come qualsiasi altra situazione di memoria insufficiente in C ++: genera uno std :: bad_alloc. I contenitori STL con allocatori predefiniti non fanno nulla di speciale, finiscono tutti per allocarsi tramite operatori new / delete standard in qualche modo .

Nel caso della mappa STL, genererà un'eccezione e altrimenti si comporterà come se non fosse stato chiamato. Cioè, il contenitore rimarrà non modificato.

Altri suggerimenti

Nuovo genererà un'eccezione. Facile come quello.

L'inserimento non avverrà e il contenuto del dizionario non verrà né modificato né corrotto.

Espandere sulla risposta di Nils (sì, lancerà), ma ciò che accade quando si lancia a volte è confuso nelle specifiche.

In 17.2.2 del disciplinare (per quanto riguarda mappe / eccezioni), se si inserisce insert (), tale funzione non ha alcun effetto. Questa è una forte garanzia per la mappa. Ciò differisce dai contenitori che utilizzano allocazione contigua come vector o deque.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top