Действительно new int[0]
четко определено.Обратите внимание, что вы должны вызвать delete[]
для возвращенного указателя, и поведение при разыменовании указателя не определено.
Аналогичные правила применяются к std::allocator().allocate(0)
: вы не можете разыменовать возвращенный указатель, и вынеобходимо очистить память обычным способом, вызвав std::allocator::deallocate
.
Распределителю разрешено генерировать исключение std::bad_alloc
;выполняя это, вы можете справиться со случаем с 0 параметрами, не нарушая при этом требований, установленных стандартом.Возвращение nullptr
является альтернативой.