在使用new(c ++)的构造函数调用中不使用括号 [英] Not using parentheses in constructor call with new (c++)
问题描述
$ b
$ b
所以我在我的主要:
pC = new Class;
它的工作方式为
Class * pC = new Class();
我今天意识到我已经省略了括号(所以我被
方案
如果类定义了默认构造函数,那么两者都是等效的;该对象将通过调用该构造函数创建。
如果类只有一个隐式的默认构造函数,那么就有区别。第一个将使任何POD类型的成员未初始化;第二个值将初始化它们(即将它们设置为零)。
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 ?
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).
这篇关于在使用new(c ++)的构造函数调用中不使用括号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!