这两个构造函数调用之间的区别

时间:2011-11-14 14:20:55

标签: c++ constructor

  

可能重复:
  Do the parentheses after the type name make a difference with new?

我相信这个问题已经被问到了,但我找不到快速搜索。

Foo ob* = new Foo; 

Foo ob* = new Foo();

这两种在C ++中创建对象的方法有区别吗?如果不是,那么其中一个被认为是不好的做法?每个编译器都对它进行相同的处理吗?

2 个答案:

答案 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...