2016-10-29 2 views
0

Этот вопрос не ограничивается встроенными типами указателей C++ 11 (shared_ptr и т. Д.), Но включает в себя любой пользовательский тип указателя, который может быть потенциально определен на C++ и включен как часть совместимого с нормами распределителя.C++ - может ли построить нетривиальный указатель, предоставленный типом распределителя, выбросить исключение?

Может ли построение нетривиального указателя, например, предоставленного настраиваемым распределителем (std :: allocator_traits <Alloc> :: указатель), выдают исключение, и если да, то почему?

+0

Зависит от того, что он строится из. Если он строится из-за перегрузки оператора, все возможно. –

ответ

2

[allocator.requirements]/4 распределитель типа X должны удовлетворять требованиям CopyConstructible (17.6.3.1). X::pointer, X::const_pointer, X::void_pointer и X::const_void_pointer должны удовлетворять требованиям NullablePointer (17.6.3.3). Не Нет конструктор, оператор сравнения, операции копирования, операции перемещения, или операция своп на этих типах должны выйти через исключение ...

Упор шахта

+0

Удивительный, спасибо. Какой номер документа это? – metamorphosis

+1

Эта цитата из C++ 14. В C++ 11 в этом абзаце отсутствует первое предложение (часть о 'CopyConstructible'), но формулировка, относящаяся к' X :: pointer' и др., Точно такая же. –