前言
成员变量的初始化(有无构造函数)
查看代码
#include <iostream>
using namespace std;
struct Person {
int m_age;
};
//全局区 成员变量默认初始化为0 无论有没有构造函数
Person g_person;
int main()
{
//栈空间 默认没有初始化
Person person;
//堆空间 默认没有初始化
Person* p0 = new Person;
//堆空间 成员变量初始化为0
Person* p1 = new Person();
cout << g_person.m_age << endl;
//cout << g_person.m_age << endl;
cout << p0->m_age << endl;
cout << p1->m_age << endl;
return 0;
}
out为
0
-842150451
0
如果有构造函数,则默认会自行初始化
#include <iostream>
using namespace std;
struct Person {
int m_age;
Person() {
}
};
//全局区 成员变量默认初始化为0 无论有没有构造函数
Person g_person;
int main()
{
//栈空间 默认没有初始化
Person person;
//堆空间 默认没有初始化
Person* p0 = new Person;
//堆空间 默认没有初始化
Person* p1 = new Person();
cout << g_person.m_age << endl;
//cout << g_person.m_age << endl;
cout << p0->m_age << endl;
cout << p1->m_age << endl;
return 0;
}
out为
0
-842150451
-842150451
代码为
#include <iostream>
using namespace std;
struct Person {
int m_age;
};
//全局区 成员变量默认初始化为0 无论有没有构造函数
Person g_person;
int main()
{
//栈空间 默认没有初始化
Person person;
//堆空间 默认没有初始化
Person* p0 = new Person;
//堆空间 成员变量初始化为0
Person* p1 = new Person();
Person* p2 = new Person[3];
Person* p3 = new Person[3]();
Person* p4 = new Person[3]{};
cout << g_person.m_age << endl;
//cout << g_person.m_age << endl;
cout << p0->m_age << endl;
cout << p1->m_age << endl;
cout << p2->m_age << endl;
cout << p3->m_age << endl;
cout << p4->m_age << endl;
return 0;
}
out为
0
-842150451
0
-842150451
0
0
结论
如果自定义了构造函数,除了全局区,其他内存空间的成员变量默认都不会被初始化,需要开发人员手动初始化