使用复制构造函数的程序输出错误

时间:2018-09-16 10:26:22

标签: c++ c++11 c++14

关于我刚刚制作的程序,我有一个非常简单的查询。如果执行此基本代码:

#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'的复制构造函数只执行一次?

1 个答案:

答案 0 :(得分:1)

尝试添加行

myvector.reserve(2);

在您声明之后立即

std::vector<Example> myvector;

当矢量必须调整自身大小以允许第二个示例的push_back时,似乎在幕后发生事。