在C++中使用向量的内部工作?

Bap*_*ton 3 c++ vector copy-constructor

我正在使用C++进行练习但是我得到意想不到的输出我希望有人可以解释.练习要求我创建一个名为rock的类,它有一个默认构造函数,一个复制构造函数和一个析构函数,所有这些都会向cout宣布自己.

在main方法中,我尝试通过值将此类的成员添加到向量:

vector<Rock> byValue;
Rock r1, r2, r3;
byValue.push_back(r1);
byValue.push_back(r2);
byValue.push_back(r3);
cout << "byValue populated\n\n";
Run Code Online (Sandbox Code Playgroud)

我预期的输出(并在练习题中显示)是:

Rock()
Rock()
Rock()
Rock(const Rock&)
Rock(const Rock&)
Rock(const Rock&)
byValue populated

~Rock()
~Rock()
~Rock()
~Rock()
~Rock()
~Rock()
Run Code Online (Sandbox Code Playgroud)

但是我得到的输出是:

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()
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释为什么似乎有额外的复制构造函数和析构函数调用?

Ben*_*igt 8

向量调整大小后,必须将元素移动到新位置.

这个是正常的.

如果你打电话

byValue.reserve(10);
Run Code Online (Sandbox Code Playgroud)

在任何电话之前push_back,额外的副本应该消失.