添加临时对象时,emplace_back是否比push_back更好?

问题描述

假设我们要将类型T的对象插入到容纳类型T的对象的容器中。在任何情况下,安置都会更好吗?例如:

class MyClass {
    MyClass(int x) { ... }
}

MyClass CreateClass() {
    int x = ... // do long computation to get the value of x
    MyClass myClass(x);
    return myClass;
}

int main() {
    vector<MyClass> v;
    // I Couldn't benchmark any performance differences between:
    v.push_back(CreateClass());
    // and
    v.emplace_back(CreateClass());
}

有没有论点更喜欢 v.emplace_back(CreateClass()) 而不是 v.push_back(CreateClass())

解决方法

假设我们要将类型T的对象插入到容纳类型T的对象的容器中。在任何情况下,安置都会更好吗?

否;在那种情况下不会有实际差异。