首页 > 解决方案 > 大括号初始化和复制初始化动态分配的对象之间的区别

问题描述

这可能是微不足道的,但我无法正确命名它,因此我找不到答案。

1和2性能之间有什么显着差异吗?

class Object {
  int number_;
  Object(int number) : number_(number) {}
};

// then, in main.

Object* objPtr1 = new Object(11) // nr.1
Object* objPtr2 {new Object{11}} // nr.2

据我了解,2 的唯一好处objPtr2是直接使用动态创建的对象的地址进行初始化,因此不涉及复制。

另一方面objPtr1正在复制初始化,这意味着:

  1. 运算符new返回新创建对象的地址,
  2. 地址正在复制到objPtr1

这个过程涉及不必要的复制,可以通过直接初始化来省略(如2)。如果我的理解是正确的,那么使用 2 比 1 对性能有很大影响吗?

标签: c++c++11initialization

解决方案


推荐阅读