默认情况下成员变量的初始化
首先,我们都知道成员变量的可以在全局区、栈区、堆区,那么他们在默认情况下会不会被初始化呢?其实通过上一篇博客程序的运行结果也能够看出一点了,在这里在做一个总结
class Person {
public:
int m_age;
};
//全局区
Person g_p1; //成员变量不会被初始化
int main() {
//栈区
Person z_p1; //成员变量不会被初始化
//堆空间
Person *d_p1 = new Person; //成员变量不会初始化
Person *d_p2 = new Person(); //成员变量初始化为0
Person *d_p3 = new Person[3]; //不会被初始化
Person *d_p4= new Person[3](); //3个Person对象的成员变量都初始化为0
Person *d_p5 = new Person[3]{};//3个Person对象的成员变量都初始化为0
return 0;
}
=================================================================
注意:如果自定义了构造函数,除了全局区以外,其他内存空间的成员变量都不会被初始化,这个可以参考上一篇博客(构造函数及其调用)程序的运行结果
=================================================================
对象的初始化:可以利用memset来实现
Person(){
memset(this,0,sizeof(Person));
}
总结(个人见解)
对于初始化问题,不管有没有构造函数,这都是语法上的规定,并不需要死记硬背。只需要知道有这么个概念就可以了