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 运算符初始化

这种初始化方法的存储位置在堆空间

需要注意的是,对于栈空间中存储的结构体变量,其生命周期与定义变量的作用域有关,一旦离开定义变量的作用域,就会被销毁;对于静态存储区中存储的结构体变量,其生命周期与程序的运行周期相同,即从程序开始执行到程序结束;对于堆空间中存储的结构体变量,其生命周期由程序员手动管理,需要在不需要使用时手动释放,避免内存泄漏。

你可能感兴趣的:(C++,c++,开发语言)