Может ли конструктор по умолчанию std :: vector генерировать исключение - PullRequest
0 голосов
/ 16 мая 2018

Если я создаю пустое std::vector с использованием конструктора по умолчанию (и распределителя по умолчанию), может ли оно вызвать исключение?

В общем случае выделение пространства для элементов контейнера может вызвать исключение (который был бы std::bad_alloc).Но конструктору по умолчанию std::vector не требуется для выделения любого такого пространства;он может лениво выделять место при первой вставке или присваивании.Но требует ли стандарт C ++ , чтобы он не генерировал исключений (подразумевая ленивое распределение или перехват std::bad_alloc и затем возвращаясь к ленивому распределению)?

1 Ответ

0 голосов
/ 16 мая 2018

Это зависит от конструктора по умолчанию Allocator. Конструктор по умолчанию std::vector объявлен как

vector() noexcept(noexcept(Allocator())); (since C++17)

А если используется std::allocator, то это noexcept(true); т.е. не будет выбрасывать исключения.

allocator() noexcept; (since C++11)

Следовательно, до C ++ 17 или при использовании распределителя не по умолчанию возможно создание исключений.

...