Объяснение прямо в ответе ,
Вам будет трудно сделать эту работу, если буфер имеет тип T
. Каждый раз, когда вы расширяете буфер, все элементы в буфере будут инициализироваться конструктором T
. Для int
это не проблема. Но если T
имеет нетривиальный конструктор, то вы заплатите высокую цену за инициализирующие элементы, которые никогда не могут быть использованы.
Когда вы можете использовать
char* buffer_;
all неиспользуемые элементы buffer_
будут содержать неинициализированные данные, но это нормально. Вы не платите цену инициализации каждого объекта с помощью нетривиального конструктора, которую вы должны заплатить, когда вы используете
T* buffer_;
@ FrancoisAndrieux. Если T
не является конструируемым по умолчанию, вы не сможете использовать new T[capacity]
для выделения памяти.
Что касается вашего комментария, для хранения любого объекта может использоваться массив из char
объектов. Вам просто нужно выделить соответствующее количество char
объектов. Вместо capacity
количества T
объектов вам нужно выделить capacity*sizeof(T)
количество char
объектов.