Per std :: map, come si comporterà l'inserimento se deve ridimensionare il contenitore e la memoria non è disponibile?
Domanda
Per std :: map, come si comporterà l'inserimento se deve ridimensionare il contenitore e la memoria non è disponibile?
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.