cpp_member_init - ShenYj/ShenYj.github.io GitHub Wiki
如果自定义了构造函数,除了全局区,其他内存空间的成员变量默认都不会被初始化,需要开发人员手动初始化
#include <iostream>
using namespace std;
struct Person {
int m_age;
};
// 全局区:成员变量初始化为 0
Person g_person;
void test() {
// 栈空间:没有初始化成员变量
// Person person;
// 堆空间:没有初始化成员变量
Person *p0 = new Person;
// 堆空间:成员变量初始化为0
Person *p1 = new Person();
cout << g_person.m_age << endl;
// cout << person.m_age << endl; 编译报错
cout << p0->m_age << endl;
cout << p1->m_age << endl;
}
#include <iostream>
using namespace std;
struct Person {
int m_age;
/// 有自定义构造函数, 但是什么都不做
Person() {
}
};
// 全局区:成员变量初始化为 0
Person g_person;
void test() {
// 堆空间:没有初始化成员变量
Person *p0 = new Person;
// 堆空间:没有初始化成员变量, 因为有了自定义构造函数,不再为其成员变量默认初始化
Person *p1 = new Person();
cout << g_person.m_age << endl;
cout << p0->m_age << endl;
cout << p1->m_age << endl;
}
全局区的成员变量会默认初始化为 0, C语言默认如此,与有没有构造函数无关 堆空间对象创建成员变量的初始化 参考 new 的几种初始化区别 堆空间内存管理
-
快速简单的成员变量初始化
struct Person { int m_age; Person() { memset(this, 0, sizeof(Person)); } };