Вопросы о распределителе стека Хиннанта

Я использовал распределитель стека Говарда Хиннанта , и он прекрасно работает, но некоторые детали реализации мне немного неясны.

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

32
задан ildjarn 21 January 2015 в 18:57
поделиться