下面举了几种比较常见的情况:(以下所有代码均假设存在一个Teacher类)
1、
#include <vector>
int main(){
std::vector<Teacher> v;
Teacher t1;
v.push_back(t1);
return 0;
}
执行v.push_back(Teacher());这段代码时,会发生拷贝构造,也就是将t1对象完全copy一份到vector容器中
2、
#include <vector>
int main(){
std::vector<Teacher> v;
Teacher t1;
v.push_back(std::move(t1));
return 0;
}
执行.push_back(std::move(t1));这段代码时,会发生移动构造。通俗一点讲就是将t1的内存转移到vector容器中,而不再高昂的代价去拷贝内存!但前提是不需要再访问t1对象了!在执行该代码之后,不可再访问t1对象
3、
#include <vector>
int main(){
std::vector<Teacher> v;
v.emplace_back();
return 0;
}
执行v.emplace_back();这行代码,即默认调用无参构造函数直接构造Teacher的对象。不需要拷贝构造或者移动构造!性能好
总结:能用emplace_back场景尽量使用