Он не выполняет два выделения, он создает объект с помощью конструктора по умолчанию для передачи в resize, затем копирует этот объект в новую позицию, затем уничтожает аргумент.
Если вы посмотрите на аргументы для изменения размера:
void resize(n, t = T())
Он имеет в качестве аргумента по умолчанию сконструированный объект по умолчанию типа T (это конструктор по умолчанию, вызываемый в ваших выходных данных). Затем, внутри функции, он копирует это в правильную позицию (это конструктор копирования). После завершения функции изменения размера уничтожает аргумент (вызов деструктора в выводе).