栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ new 对象的时候,加括号与不加的区别

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ new 对象的时候,加括号与不加的区别

在代码中时常会遇到两种new的形式

A* a = new A;//①
A* a = new A();//②

那么,这两者有何区别吗?

结论

先给出结论:

  • 当A类无构造函数,有数据成员的情况下,有区别。①的数据成员为随机值,而②的数据成员会被初始化。
  • 当A类有构造函数,有数据成员的情况下,无区别。数据成员都为随机值,因为此时,初始化由构造函数去执行。
  • 如果A是空类,那么以上两种写法没有区别。

另外基本数据类型的情况如下:

int *a1 = new int;//初值随机
int *a2 = new int();//初值0
int *a3 = new int(100);//初值100
验证

环境:Clion 2022.1.1 + MinGW

这里声明了一个类A,里面有一个int型数据成员

class A
{
 public:
//	A() = default;
//	A(){}
	int m;
};

int main()
{
	A* a = new A;
	A* b = new A();

	return 0;
}

一,无构造函数的情况下

二,有构造函数的情况下

注意:

A(){} 和A()=default是不一样的!!!

=default令编译器为某个类生成显式默认化的函数定义,简单来说,就是显式生成编译器默认的合成构造函数。这个和没有构造函数的情况(隐式)是一样的。

这里额外验证了一下,数据成员为类类型时的情况,也是和上述结论一致。

class A
{
 public:
	int m;
};

class B
{
	A a;
};

int main()
{
	B* b1 = new B;
	B* b2 = new B();
	return 0;
}


C++ default

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/916927.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号