在使用C++中的new关键字进行构造函数调用时不使用括号

23

可能是重复问题:
在使用 new 关键字时,类型名称后面的圆括号有什么区别?

所以我在我的主程序中写了:

Class* pC = new Class;

它之前是可以正常工作的

Class* pC = new Class();

我今天才意识到我忘记加括号了,所以我遭遇了一种与最令人烦恼的解析相反的情况。

我的问题是:这两种形式是否等效?


两个调用都会调用默认构造函数。 - Vijay Mathew
1个回答

50
如果这个类定义了默认构造函数,那么这两种方式是等效的;对象将通过调用该构造函数来创建。
如果这个类只有一个隐式的默认构造函数,那么它们就有所不同。第一种方式会使任何POD类型的成员保持未初始化状态;而第二种方式会对它们进行值初始化(即将它们设置为零)。

8
+1,我不知道这个区别。 - Matteo Italia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接