使用不同的新表达式语法创建对象的区别是什么

时间:2016-05-03 11:54:40

标签: c++ c++11 constructor new-operator

以下是c ++中三种不同的初始化方式,如果我们没有任何参数,请你解释这三种方式是否有任何区别

这三种方式在创建对象时起作用,同时返回一个函数(例如:return new myClass)

当其他方式失败时,每个人如何以及在何处确切地适应?

myClass *p = new myClass;

myClass *p = new myClass();

myClass *p = new myClass{}

1 个答案:

答案 0 :(得分:3)

来自new expression

的cppreference
  

对于非数组类型,单个对象在获取的内存区域中构造。

           

如果type是数组类型,则初始化对象数组。

     

然而,在您的示例中,由于没有参数,因此它们是value-initialized

  

使用由一对空括号或大括号组成的初始化程序创建无名临时对象时执行值初始化

所以对于你的三个例子

myClass *p = new myClass;    // default-initialized

myClass *p = new myClass();  // value-initialized

myClass *p = new myClass{};  // value-initialized