c++ - 添加临时对象时 emplace_back 是否比 push_back 更好?

标签 c++ vector move perfect-forwarding emplace

假设我们要将一个类型为 T 的对象插入到保存类型为 T 的对象的容器中。无论如何,emplace 会更好吗?例如:

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())

最佳答案

suppose we want to insert an object of type T into a container holding type T objects. Would emplace be better in any case?

没有;在这种情况下,不会有任何实际差异。

关于c++ - 添加临时对象时 emplace_back 是否比 push_back 更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64637192/

相关文章:

C++ for循环数组赋值。得到垃圾返回

c++ - 模板函数中任意迭代器的值类型

c++ - 线程对象可以在C++ 11中 move 吗?

c++ - 在 pair.first 上使用 std::move 是否会使 pair.second 无效?

jquery - 多个 Div 均以可变速度跟随光标

c++ - curl 字符串追加问题,curl_formadd C++ 读取带有额外字符的变量但直接工作正常 CURLFORM_COPYNAME, "key"[?]

c++ - Qt 重载运算符

c++ - 如何打印 HKEY 或将其转换为字符串?

java - 编写 Java 比较器

java - 如何在java中从 vector 的 vector 中打印