大括号初始化和动态分配对象的复制初始化之间的区别

时间:2020-10-13 10:30:42

标签: c++ c++11 initialization

这可能很琐碎,但我无法正确命名,因此找不到答案。

在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上使用2是否对性能有很大的影响?

0 个答案:

没有答案