关于我刚刚制作的程序,我有一个非常简单的查询。如果执行此基本代码:
#include <iostream>
#include <vector>
class Exam
{
public:
int b;
Example(int a)
{
b = a;
}
Exam(const Exam &other)
{
printf("Copy constructor of %d\n", other.b);
b = other.b;
}
};
int main()
{
std::vector<Exam> myvector;
Exam ex1(1);
Exam ex2(2);
myvector.push_back(ex1);
myvector.push_back(ex2);
return 1;
}
它生成以下输出:
Copy constructor of 1
Copy constructor of 2
Copy constructor of 1
为什么'1'的复制构造函数执行两次,而'2'的复制构造函数只执行一次?
答案 0 :(得分:1)
尝试添加行
myvector.reserve(2);
在您声明之后立即
std::vector<Example> myvector;
当矢量必须调整自身大小以允许第二个示例的push_back时,似乎在幕后发生事。