使用不同的新表达式语法创建对象有什么区别 下面是C++中三种不同的初始化方式,如果没有任何参数,请解释这三种方法是否有区别。

使用不同的新表达式语法创建对象有什么区别 下面是C++中三种不同的初始化方式,如果没有任何参数,请解释这三种方法是否有区别。,c++,c++11,constructor,new-operator,C++,C++11,Constructor,New Operator,这三种方法在创建对象时有效,在返回函数时也有效(例如:returnnewmyclass) 当其他方法失败时,每种方法如何以及在何处分别适用 myClass *p = new myClass; myClass *p = new myClass(); myClass *p = new myClass{} 从 对于非数组类型,在获取的内存区域中构造单个对象 如果缺少初始值设定项,则对象为 如果初始值设定项是带括号的参数列表,则对象为 . 如果初始值设定项是括号内的 参数,则对象为 如果类

这三种方法在创建对象时有效,在返回函数时也有效(例如:returnnewmyclass)

当其他方法失败时,每种方法如何以及在何处分别适用

myClass *p = new myClass;

myClass *p = new myClass();

myClass *p = new myClass{}

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

  • 如果缺少初始值设定项,则对象为
  • 如果初始值设定项是带括号的参数列表,则对象为 .
  • 如果初始值设定项是括号内的 参数,则对象为
如果类型是数组类型,则初始化对象数组

  • 如果缺少初始值设定项,则每个元素都是
  • 如果初始值设定项是一对空括号,则每个元素都是空的
  • 如果初始值设定项是用大括号括起来的参数列表,则数组为
然而,在您的示例中,因为没有参数,所以它们是

当使用由空括号或大括号组成的初始值设定项创建匿名临时对象时,将执行值初始化

那么你的三个例子呢

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

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

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

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

  • 如果缺少初始值设定项,则对象为
  • 如果初始值设定项是带括号的参数列表,则对象为 .
  • 如果初始值设定项是括号内的 参数,则对象为
如果类型是数组类型,则初始化对象数组

  • 如果缺少初始值设定项,则每个元素都是
  • 如果初始值设定项是一对空括号,则每个元素都是空的
  • 如果初始值设定项是用大括号括起来的参数列表,则数组为
然而,在您的示例中,因为没有参数,所以它们是

当使用由空括号或大括号组成的初始值设定项创建匿名临时对象时,将执行值初始化

那么你的三个例子呢

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

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

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

如果
myClass
没有默认值,则这三个选项都会失败constructor@tobi好的,有一个默认的构造函数。这三种方法都有效。这是基本假设。ThanksIt的不同取决于您是为
myClass
编写自己的构造函数,还是使用隐式生成的构造函数。如果
myClass
是一个聚合,则后一种情况不同。这个问题可能太宽泛了,除非你对类的属性更加具体。我认为第一个问题使用默认构造函数创建myClass的实例,第二个问题使用不带参数的构造函数创建myClass的实例(可能是默认的),第三种方法是创建一个myClass实例,默认构造函数将空数组传递给构造函数……如果
myClass
没有默认值,这三种方法都会失败constructor@tobi好的,有一个默认的构造函数。这三种方法都有效。这是基本假设。ThanksIt的不同取决于您是为
myClass
编写自己的构造函数,还是使用隐式生成的构造函数。如果
myClass
是一个聚合,则后一种情况不同。这个问题可能太宽泛了,除非你对类的属性更加具体。我认为第一个问题使用默认构造函数创建myClass的实例,第二个问题使用不带参数的构造函数创建myClass的实例(可能是默认的),第三种方法是创建一个myClass实例,默认构造函数将空数组传递给构造函数……答案中值得一提的是,对于空列表,
newMyClass()
newMyClass{}
是相同的。(但是,
new myClass
可能会有所不同,最好给出一个不同之处的概要)。@M.M你能解释一下,这就是我想要的超级解释,在此之前,我从来都不知道构造函数调用有这么多定义,它总是创建一个对象,然后只做你的工作。
myClass{}
的描述是非常错误的。执行的初始化类型取决于
myClass
是否为聚合。答案中值得一提的是,对于空列表,
new myClass()
new myClass{}
是相同的。(但是,
new myClass
可能会有所不同,最好给出一个不同之处的概要)。@M.M你能解释一下,这就是我想要的超级解释,在此之前,我从来都不知道构造函数调用有这么多定义,它总是创建一个对象,然后只做你的工作。
myClass{}
的描述是非常错误的。执行的初始化类型取决于
myClass
是否为聚合。