Можно ли предположить, что для любого типа T
тип std::list<T>
будет иметь тот же постоянный размер? Просто, чтобы понять это, я имею в виду только размер "основного" типа, а не выделенную им память.
Мне кажется логичным предположить, что размер T
сам по себе должен влиять только на размер узлов списка, распределенных с помощью распределителя.
Однако есть две вещи, которые могут вызвать вариацию sizeof(std::list<T>)
, о которой я могу думать:
- Стандартная библиотека С++ пытается "оптимизировать" тип
std::list
, помещая некоторые из экземпляровT
в самstd::list<T>
. Мне это кажется плохой идеей, и это, вероятно, нарушает требования "постоянного времени", установленные стандартом; - Стандартный С++ с библиотечными специализациями
std::list<T>
для некоторых типов, со специализациями разных размеров.
Я не могу придумать никаких применений для (1) или (2), но я могу ошибаться.
То, что я собираюсь достичь, - это использовать распределяющий срез для фиксированного размера для класса шаблона, используя std::list<T>
внутри.
В качестве примечания: речь идет о дисперсии для разных типов T
, а не для разных распределителей. Я буду иметь явный контроль над всеми экземплярами, и все они будут использовать std::allocator
.