Я работаю над упражнением на C ++, но получаю неожиданный вывод. Я надеюсь, что кто-то может объяснить.В упражнении было предложено создать класс с именем rock, который имеет конструктор по умолчанию, конструктор копирования и деструктор, которые объявляют себя cout.
В основном методе я пытаюсь добавить членов этого класса в вектор по значению:
vector<Rock> byValue;
Rock r1, r2, r3;
byValue.push_back(r1);
byValue.push_back(r2);
byValue.push_back(r3);
cout << "byValue populated\n\n";
Результат, который я ожидал (и показан в решениях для упражнений):
Rock()
Rock()
Rock()
Rock(const Rock&)
Rock(const Rock&)
Rock(const Rock&)
byValue populated
~Rock()
~Rock()
~Rock()
~Rock()
~Rock()
~Rock()
Однако вывод, который я получаю:
Rock()
Rock()
Rock()
Rock(const Rock&)
Rock(const Rock&)
Rock(const Rock&)
~Rock()
Rock(const Rock&)
Rock(const Rock&)
Rock(const Rock&)
~Rock()
~Rock()
byValue populated
~Rock()
~Rock()
~Rock()
~Rock()
~Rock()
~Rock()
Может кто-нибудь объяснить, почему, похоже, существуют дополнительные вызовы конструктора и деструктора копирования?