欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

emplace_back与push_back的区别

程序员文章站 2022-03-21 16:30:00
...

下面举了几种比较常见的情况:(以下所有代码均假设存在一个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场景尽量使用