Para std :: map, como irá inserir comportam se tiver que redimensionar o recipiente e a memória não está disponível?

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

  •  01-07-2019
  •  | 
  •  

Pergunta

Para std :: map, como irá inserir comportam se tiver que redimensionar o recipiente e a memória não está disponível?

Foi útil?

Solução

mapa

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top