C++的构造函数和析构函数(二)默认情况下成员变量的初始化

默认情况下成员变量的初始化

首先,我们都知道成员变量的可以在全局区、栈区、堆区,那么他们在默认情况下会不会被初始化呢?其实通过上一篇博客程序的运行结果也能够看出一点了,在这里在做一个总结

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));
}

总结(个人见解)
对于初始化问题,不管有没有构造函数,这都是语法上的规定,并不需要死记硬背。只需要知道有这么个概念就可以了

猜你喜欢

转载自blog.csdn.net/qq_47329614/article/details/106911584
今日推荐