C++ new与new()的区别

  1. 类中有公共的默认构造函数,new class与new class()都会调用默认构造函数。
  2. 声明一个类对象时,不一定是调用了默认的构造函数;只有在没有任何构造函数且类 变量{}声明的时候,编译器才会对内置类型进行“零值化”;类中无显示定义的默认构造函数,但编译器会自动合成默认的构造函数的四种情况:
    1). 包含了一个类的对象,类对象类型有一个默认构造函数(包括编译器合成的默认构造函数)
    2). 如果继承自一些基类,其中某些基类有一个默认构造函数(包括编译器合成的默认构造函数)
    3). 有一个虚函数,或者继承到了虚函数
    4). 有虚基类
  • 如果该类没有定义构造函数(由编译器合成默认构造函数),不管有没有虚函数,那么class c = new class;将不调用合成的默认构造函数,而class c = new class()则会调用默认构造函数。
  1. 类无显示的构造函数,也无自动合成的情况时:
	class A {
	public:
		int a;
	};
  • 如果该类没有显示定义构造函数(也无编译器合成默认构造函数),那么class c = new class将不对内置类型初始化,而class c = new class()则会对内置类型初始化。
  1. 默认构造函数私有或有其它的构造函数,但不能合成默认的构造函数,此时new class 和 new class()会调用出错,原因不存在默认构造函数。
  2. 对于内置类型:
       int *a = new int;  //不会将申请到的int空间初始化,
       int *a = new int();//会将申请到的int空间初始化为0。

以下两个语句的区别是:new class动态申请的空间里面的值是随机值,new class()进行了内置类型值的初始化,里面的值为0:

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值