可能重复:
Do the parentheses after the type name make a difference with new?
我相信这个问题已经被问到了,但我找不到快速搜索。
Foo ob* = new Foo;
Foo ob* = new Foo();
这两种在C ++中创建对象的方法有区别吗?如果不是,那么其中一个被认为是不好的做法?每个编译器都对它进行相同的处理吗?
答案 0 :(得分:7)
第一个是默认初始化,第二个是值初始化。如果Foo
是类类型,它们都会调用默认构造函数。如果Foo
是基本的(例如typedef int Foo;
),则默认初始化不执行初始化,而值初始化执行零初始化。
对于类类型和数组,初始化以预期的方式递归地进行到成员/元素。
答案 1 :(得分:3)
除了Foo
是内置类型then the former does not value-initialise it之外,没有区别。
所以:
new int; // unspecified value
new int(); // 0
这与内置插件的“正常”分配非常匹配:
int x; // unspecified value
int x = 0; // well, you can't do `int x()`, but, if you could...