Давайте посмотрим на
myvec.push_back(temp(count));
Здесь вы создаете временный temp
объект с temp(count)
.Затем он сохраняется как копия внутри вектора.Затем временный объект уничтожается.
Уничтожение временного объекта является одним из случаев вызова деструктора.
Затем, когда вектор динамически изменяет размеры, он копирует содержимое в новую большую память данных.Объект из меньшей памяти данных будет уничтожен.Что, конечно, приводит к тому, что деструктора называют.И это изменение размера и копирование может происходить несколько раз.
Что касается того, как работает алгоритм изменения размера вектора, это очень зависит от реализации, но общий способ состоит в том, чтобы изменять размер для каждого push_back
, пока размер маленький, а затемзарезервируйте все более крупные куски по мере увеличения размера.
Если вы не хотите изменять размеры и копировать, тогда, если вы знаете количество элементов, которые будут сохранены в векторе, вы можете установить определенный размер наначните с и используйте обычный синтаксис индексации массива для присваивания элементам, или вы можете reserve
пробел вперед.