Должен ли C ++ allocator :: allocate throw или нет? - PullRequest
0 голосов
/ 13 мая 2018

Концепция Allocator и std :: allocator_traits не говорит, будет ли allocate выдавать или нет.

Поэтому, когда я пишу контейнериспользуя распределители, как узнать, проверять ли тип возвращаемого значения или использовать catch?

Ответы [ 2 ]

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

Таблица в разделе Требования на странице, на которую вы ссылаетесь, дает достаточно информации, когда она может генерировать исключения и когда она не должна генерировать исключения.Ниже приводится кавычка, когда распределитель может выдавать исключения.

a.allocate(n) выделяет хранилище, подходящее для n объектов типа T, но не создает их.Может генерировать исключения.

Какой тип исключений выдается, там не описано и, возможно, зависит от реализации.Обычно это std::bad_alloc в STL.

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

Да, это может бросить. И исключение составляет std::bad_alloc, поскольку оно использует allocator, переданное ему, в то время как std::allocator выдаст std::bad_alloc.

На странице, на которую вы ссылаетесь, представлены два сценария:

  1. Calls a.allocate (n)
  2. Дополнительно передает подсказку о локальности памяти. Вызывает a.allocate (n, подсказка), если это возможно. Если это невозможно (например, a не имеет функции-члена allocate () с двумя аргументами), вызывает a.allocate (n)

так что в основном вы можете обратиться к этому:

http://en.cppreference.com/w/cpp/memory/allocator/allocate

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...