美文网首页
C++优化:使用emplace

C++优化:使用emplace

作者: fck_13 | 来源:发表于2020-04-26 00:02 被阅读0次

    场景:向一个vector末尾插入一个元素,一般我们使用的函数是push_back,代码如下:

    #include <iostream>
    #include <vector>
    
    class ComplexClass{
    public:
      ComplexClass(){
        std::cout<<"Constructor"<<std::endl;
      }
      ~ComplexClass(){
        std::cout<<"Destructor"<<std::endl;
      }
    private:
      //some data member
    };
    
    int main(){
      std::vector<ComplexClass> vec;
      vec.push_back(ComplexClass());
      return 0;
    }
    

    执行上述的代码,结果如下:

    Constructor
    Destructor
    Constructor
    Destructor
    

    为了在一个vector的末尾添加一个元素,C++竟然将这个元素构建了两次,这两次分别是:

    • 在栈上构建这个对象
    • 将这个对象以参数传入push_back的时候还要构建一次
      这明显是不可接受的,为了解决这个问题,C++11引入了emplace_back,该函数的作用是直接在emplace_back中构建对象,而不是以参数的形式传入。所以这个函数的实际参数是可以构建对象的构造函数的参数。由于ComplexClass 的构造函数是没有参数的,所以,上述的代码可以修改为
    vec.emplace_back();
    

    代码修改后的运行结果为:

    Constructor
    Destructor
    

    相关文章

      网友评论

          本文标题:C++优化:使用emplace

          本文链接:https://www.haomeiwen.com/subject/fmqrwhtx.html