Foo f1 = Foo();      // (1) Ok
Foo f2 = Foo;        // (2) Compiler error

Foo *p1 = new Foo(); // (3) Ok
Foo *p2 = new Foo;   // (4) Ok. Why??

我想知道为什么存在两种初始化指针的方法。它看起来有点不一致。是否有一些合乎逻辑的原因,如果有,是什么?或者,也许这是某种遗产?如果是这样,这种符号的起源是什么?

最佳答案

至少可以说,这有点……复杂。

在处理对象时,两种表示法是等价的。在处理原始类型(例如 int )时, (3) 将初始化(零填充)该值,而 (4) 不会(该值将保持未定义)。

对于自动分配的对象,这:

Foo f1;

使用默认构造函数声明并初始化 Foo 对象。这:
Foo f2 = Foo();

使用复制构造函数声明并初始化 Foo 对象,实质上是复制临时对象( Foo() )的值,该对象是使用默认构造函数构建的。

10-08 13:09
查看更多