Прежде всего, у вас есть утечки памяти, так как вы не удаляете память, выделенную из new
. Правильный способ сделать то, что вы хотите сделать, это v.push_back(B(100));
.
Относительно того, почему копия ctor вызывается дважды, похоже, что при второй вставке вектор достиг своей емкости и перераспределяется. Во время этого перераспределения он копирует ранее вставленные элементы во вновь выделенную память. Следовательно, вы видите, что копия ctor вызывается дважды.