在使用new(c ++)的构造函数调用中不使用括号 [英] Not using parentheses in constructor call with new (c++)

查看:207
本文介绍了在使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆