Для std::map, как будет вести себя вставка, если ей нужно изменить размер контейнера, а память недоступна?
Вопрос
Для std::map, как будет вести себя вставка, если ей нужно изменить размер контейнера, а память недоступна?
Решение
Карта STL не обязана "изменять размер" контейнера.map (как и list) - это контейнер на основе узла;каждая вставка выделяет память.
Тем не менее, ситуация нехватки памяти обрабатывается точно так же, как любая другая ситуация нехватки памяти в C ++:он выдает std::bad_alloc .Контейнеры STL с распределителями по умолчанию не делают ничего особенного, все они в конечном итоге распределяются с помощью стандартных операторов new / delete каким - то образом.
В случае STL map он сгенерирует исключение и в противном случае будет вести себя так, как если бы он не был вызван.То есть контейнер останется неизмененным.
Другие советы
New выдаст исключение.Вот так просто.
Вставка не произойдет, и содержимое словаря также не будет изменено или повреждено.
Чтобы подробнее остановиться на ответе Nils (да, он выбросит), но то, что происходит, когда он выбрасывает, иногда сбивает с толку спецификацию.
В 17.2.2 спецификации (относительно карт / исключений), если insert() выдает ошибку, эта функция не имеет никакого эффекта.Это надежная гарантия для map.Это отличается от контейнеров, использующих непрерывное распределение, таких как vector или deque.