以下是c ++中三种不同的初始化方式,如果我们没有任何参数,请你解释这三种方式是否有任何区别
这三种方式在创建对象时起作用,同时返回一个函数(例如:return new myClass)
当其他方式失败时,每个人如何以及在何处确切地适应?
myClass *p = new myClass;
myClass *p = new myClass();
myClass *p = new myClass{}
答案 0 :(得分:3)
对于非数组类型,单个对象在获取的内存区域中构造。
- 如果缺少初始化程序,则对象为default-initialized。
- 如果初始化程序是带括号的参数列表,则对象为 direct-initialized。
- 如果初始化程序是括号括起来的列表 参数,对象是list-initialized。
如果type是数组类型,则初始化对象数组。
- 如果缺少初始化程序,则每个元素都为default-initialized。
- 如果初始化程序是一对空括号,则每个元素都是value-initialized。
- 如果初始化程序是括号括起来的参数列表,则数组为aggregate-initialized。
然而,在您的示例中,由于没有参数,因此它们是value-initialized
使用由一对空括号或大括号组成的初始化程序创建无名临时对象时执行值初始化
所以对于你的三个例子
myClass *p = new myClass; // default-initialized
myClass *p = new myClass(); // value-initialized
myClass *p = new myClass{}; // value-initialized