【问题标题】:Difference between these two constructor calls [duplicate]这两个构造函数调用之间的区别[重复]
【发布时间】:2011-12-28 16:56:27
【问题描述】:

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

我相信这个问题已经被问过了,但我无法通过快速搜索找到它。

Foo ob* = new Foo; 

Foo ob* = new Foo();

这两种在 C++ 中创建对象的方式有区别吗?如果不是,那么其中之一是否被认为是一种不好的做法?每个编译器都对待它一样吗?

【问题讨论】:

标签: c++ constructor


【解决方案1】:

第一个是默认初始化,第二个是值初始化。如果Foo 是类类型,它们都调用默认构造函数。如果Foo 是基本的(例如typedef int Foo;),默认初始化不执行初始化,而值初始化执行零初始化。

对于类类型和数组,初始化以预期的方式递归地进行到成员/元素。

【讨论】:

  • 你的答案比我的准确得多,该死
【解决方案2】:

除了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... 

【讨论】:

  • 现在你可以int x{}; :-)
  • @KerrekSB:好点子 ;) 不过并不能真正帮助我与“熟悉”的东西进行比较!
  • 呵呵,没有。我认为上次我们得出的结论是,您可以为自动对象做的最好的事情是 int x((int()); 左右。
  • @KerrekSB:哈哈,是的,只是在玩这个,决定不再打扰;)
猜你喜欢
  • 1970-01-01
  • 2013-09-09
  • 2017-12-04
  • 2017-10-20
  • 2015-02-24
  • 2015-06-05
  • 2013-04-29
  • 2020-08-30
  • 2018-11-01
相关资源
最近更新 更多