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()
)的值,该对象是使用默认构造函数构建的。