Я использую Howard Hinnant распределитель стека, и он работает как шарм, но некоторые детали реализации немного неясны для меня.
- Почему используются глобальные операторы
new
иdelete
? Функции-членыallocate()
иdeallocate()
используют::operator new
и::operator delete
соответственно. Аналогично, функция-членconstruct()
использует глобальное размещение new. Почему бы не разрешить какие-либо пользовательские глобальные или специфичные для класса перегрузки? - Почему для выравнивания установлено 16-битное кодирование, а не
std::alignment_of<T>
? - Почему конструкторы и
max_size
имеют спецификацию исключенияthrow()
? Разве это не обескураживает (см., Например, более эффективный С++, пункт 14.)? Действительно ли необходимо прекратить и прервать, когда в распределителе возникает исключение? Изменяется ли это с новым ключевым словом С++ 11noexcept
? - Функция члена
construct()
будет идеальным кандидатом для идеальной пересылки (вызывающему конструктору). Является ли это способом написания сопоставимых распределителей С++ 11? - Какие еще изменения необходимы для обеспечения соответствия текущего кода С++ 11?