Я подозреваю, что фактический ответ в значительной степени зависит от реализации STL и используемого компилятора, однако у функции "resize" есть прототип ( ref )
void resize( size_type num, TYPE val = TYPE() );
, что подразумевает, что val создается по умолчанию и копируется во вновь выделенное (или, возможно, ранее выделенное, но неиспользуемое) пространство посредством размещения new и конструктора копирования. Таким образом, обе операции требуют одинаковой последовательности действий:
- Вызов конструктора по умолчанию
- Распределить пространство
- Инициализация с помощью конструктора копирования
Вероятно, лучше отложить до более ясного и более общего (с точки зрения контейнеров STL) push_back, чем применять преждевременную оптимизацию - если профилировщик выделяет push_back как горячую точку, то наиболее вероятной причиной является выделение памяти, Лучше всего решать с помощью разумного использования резерва.