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