Я использовал распределитель стека Говарда Хиннанта , и он прекрасно работает, но некоторые детали реализации мне немного неясны.
new
и delete
? Функции-члены allocate()
и deallocate()
используют ::operator new
и ::operator delete
соответственно. Точно так же функция-член construct()
использует глобальное размещение new. Почему бы не разрешить любые пользовательские -определенные глобальные или специфичные для класса -перегрузки?std::alignment_of
?max_size
имеют спецификацию исключений throw()
? Разве это не обескураживает (см. напр. Более эффективный C++. Пункт 14. )? Действительно ли необходимо завершать и прерывать работу, когда в распределителе возникает исключение? Изменится ли это с новым ключевым словом С++ 11 noexcept
?construct()
была бы идеальным кандидатом для идеальной переадресации (вызываемому конструктору ). Это способ написания распределителей, совместимых с С++ 11?