C++结构体分别在:栈空间、堆空间、静态存储区中初始化
1,指定每个成员的初始值
struct Person {
std::string name;
int age;
};
Person p = {"Alice", 20}; // 指定每个成员的初始值
这种初始化方法的存储位置取决于定义变量的位置,如果定义在函数内,则存储在栈空间;如果定义在全局作用域,则存储在静态存储区。
2,只初始化部分成员
struct Person {
std::string name;
int age;
};
Person p = {.age = 20}; // 只初始化 age 成员
这种初始化方法的存储位置取决于定义变量的位置,如果定义在函数内,则存储在栈空间;如果定义在全局作用域,则存储在静态存储区。
3,使用默认构造函数
struct Person {
std::string name;
int age;
Person() : name("Unknown"), age(0) {}
};
Person p; // 使用默认构造函数初始化
这种初始化方法的存储位置取决于定义变量的位置,如果定义在函数内,则存储在栈空间;如果定义在全局作用域,则存储在静态存储区。
4,使用 new 运算符
struct Person {
std::string name;
int age;
};
Person *p = new Person{"Alice", 20}; // 使用 new 运算符初始化
这种初始化方法的存储位置在堆空间。
需要注意的是,对于栈空间中存储的结构体变量,其生命周期与定义变量的作用域有关,一旦离开定义变量的作用域,就会被销毁;对于静态存储区中存储的结构体变量,其生命周期与程序的运行周期相同,即从程序开始执行到程序结束;对于堆空间中存储的结构体变量,其生命周期由程序员手动管理,需要在不需要使用时手动释放,避免内存泄漏。