Включите предупреждения, и вы увидите, что вы инициализируете не элемент elements
, а переменную:
T *elements=new T[size_];
Поэтому, когда вы удаляете их, вы в основном пытаетесь удалить сломанный указатель, который имеетни разу не было выделено и нигде нет очков. Это фактически приводит к аварийному завершению программы.
Кстати, вы должны опубликовать фактический код, который вы запускаете, потому что в настоящее время ваше имя класса Vectors
, множественное число;но конструкторы называются Vector
. Правильный конструктор будет использовать списки инициализатора и будет иметь значение explicit
:
explicit Vector(std::size_t size)
: size_(size), elements_(new T[size_])
{
}
Конструктор по умолчанию не должен пытаться выделить массив размера 0. Просто сохраните elements
как nullptr
.