在使用 new (c++) 调用构造函数时不使用括号
可能的重复:
在类型名称后面添加括号与 new 有区别吗?
所以我的主要内容是:
Class* pC = new Class;
它正在工作,因为
Class* pC = new Class();
我今天才意识到我省略了括号(所以我在某种程度上受到了最令人烦恼的解析的“相反”的打击)。
我的问题:这两种形式等效吗?
Possible Duplicate:
Do the parentheses after the type name make a difference with new?
So I had in my main:
Class* pC = new Class;
It was working as
Class* pC = new Class();
I realized just today that I had omitted the parentheses (so I was hit by the "opposite" of the most vexing parse in a way).
My question: Are these two forms equivalent ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果类定义了默认构造函数,则两者是等效的;该对象将通过调用该构造函数来创建。
如果类只有一个隐式默认构造函数,那么就有区别。第一个将使 POD 类型的任何成员处于未初始化状态;第二个将对它们进行值初始化(即将它们设置为零)。
If the class has a default constructor defined, then both are equivalent; the object will be created by calling that constructor.
If the class only has an implicit default constructor, then there is a difference. The first will leave any members of POD type uninitialised; the second will value-initialise them (i.e. set them to zero).