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:

发布了75 篇原创文章 · 获赞 6 · 访问量 2799

猜你喜欢

转载自blog.csdn.net/u014618114/article/details/103550502
今日推荐