Para std :: map, como irá inserir comportam se tiver que redimensionar o recipiente e a memória não está disponível?
Pergunta
Para std :: map, como irá inserir comportam se tiver que redimensionar o recipiente e a memória não está disponível?
Solução
STL não tem de container "redimensionamento". mapear (como lista) é um recipiente com base nó; cada memória inserção aloca.
Dito isso, fora da situação de memória é tratada como qualquer outra situação fora-de-memória em C ++: ele lança um std :: bad_alloc. contêineres STL com alocadores padrão não faz nada extravagante, todos eles acabam alocando via operadores novos / apagar padrão de alguma forma .
No caso do mapa STL, ele irá lançar exceção e, caso contrário, comportam-se como se não foi chamado. Ou seja, o recipiente permanecerá inalterado.
Outras dicas
Novo vai lançar uma exceção. Fácil assim.
A inserção não vai acontecer, e nem será o conteúdo do dicionário ser modificado ou corrompido.
Para expandir a resposta Nils (sim ele vai jogar), mas o que acontece quando se joga às vezes é confuso na spec.
Em 17.2.2 da especificação (sobre mapas / exceções), se insert () lança, essa função não tem efeito. Esta é uma garantia forte para mapa. Isto difere de recipientes utilizando alocação contígua como vector ou fila de dupla extremidade.