实验代码:
class A {
public:
A(int x) {
x = x;
cout << "construct A" << endl;
}
A(const A& a) {
x = a.x;
cout << "copy construct A" << endl;
}
A(const A&& a) {
cout << "Move construct A" << endl;
}
private:
int x;
};
int main()
{
vector<A> vec;
vector<A> vec2;
cout << endl << "emplace" << endl;
vec.emplace_back(1);
cout << endl << "push" << endl;
vec2.push_back(1);
运行结果:
在定义了A的移动构造函数的时候
注释掉A的移动构造函数后
结果:
push_back会在有移动构造函数时优先使用移动构造,没有移动构造就使用拷贝构造。
emplace_back只进行一次构造。