Для std::map, как будет вести себя вставка, если ей нужно изменить размер контейнера, а память недоступна?

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

  •  01-07-2019
  •  | 
  •  

Вопрос

Для std::map, как будет вести себя вставка, если ей нужно изменить размер контейнера, а память недоступна?

Это было полезно?

Решение

Карта STL не обязана "изменять размер" контейнера.map (как и list) - это контейнер на основе узла;каждая вставка выделяет память.

Тем не менее, ситуация нехватки памяти обрабатывается точно так же, как любая другая ситуация нехватки памяти в C ++:он выдает std::bad_alloc .Контейнеры STL с распределителями по умолчанию не делают ничего особенного, все они в конечном итоге распределяются с помощью стандартных операторов new / delete каким - то образом.

В случае STL map он сгенерирует исключение и в противном случае будет вести себя так, как если бы он не был вызван.То есть контейнер останется неизмененным.

Другие советы

New выдаст исключение.Вот так просто.

Вставка не произойдет, и содержимое словаря также не будет изменено или повреждено.

Чтобы подробнее остановиться на ответе Nils (да, он выбросит), но то, что происходит, когда он выбрасывает, иногда сбивает с толку спецификацию.

В 17.2.2 спецификации (относительно карт / исключений), если insert() выдает ошибку, эта функция не имеет никакого эффекта.Это надежная гарантия для map.Это отличается от контейнеров, использующих непрерывное распределение, таких как vector или deque.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top