最近在看webrtc的trunk上最新的代码,今天无意间留意到了stl容器中的“std::vector<T>::emplace_back”。事实上在接触webrtc之初我就经常能看到这个方法的使用,只不过那时候的对webrtc完全不了解,所焦点都在webrtc是个什么东西上。
后来查stl官方文档,看到的解释为:
构造并插入元素
同时网站上也给出了列子,但并不是很明确。看vs2015中对该函数的实现,实在看不懂(因为和push_back的一个分支实现很非常相似)。google看到这个函数代表在vector内部进行构造并放到数组里。
这样做的好处在于不需要去特意写移动构造函数,也不需要进行任何移动操作。间接的加快了性能。
ps:由于网上的说法存在问题,所这里要明确更正一下。
emplace_back和push_back两个函数都是通过“布局new”的方式将元素对象的内存放到自己的堆中(并非栈中)。