当前位置: 首页 > article >正文

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

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

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


http://www.kler.cn/a/18483.html

相关文章:

  • Python教程笔记(1)
  • Golang常见编码
  • Django 详细入门介绍
  • 2024年【汽车修理工(高级)】考试试卷及汽车修理工(高级)证考试
  • 数据库管理-第260期 业务向前,数据库向后(20241111)
  • 【Linux系统编程】第四十五弹---线程互斥:从问题到解决,深入探索互斥量的原理与实现
  • 【计算机专业漫谈】【计算机系统基础学习笔记】W2-2-1 原码和移码表示
  • vue概述
  • Go数据机构----栈与队列
  • CANoe以太网配置 Network-Based Access Mode
  • 离散化(算法)
  • 卫星下行链路预算模型(未完待续)
  • JavaScript (七) -- JavaScript 事件(需要了解的事件的运用)
  • C++运算符重载
  • 可视化绘图技巧100篇分析篇(二)-生存曲线(LM曲线)(补充篇)
  • EMC VNX登录Unisphere错误 certificate has invalid date问题处理
  • DC-8通关详解
  • orin配置系统
  • api数据接口文档_接口文档示例(以1688平台API接口文档实例演示)
  • HID Relay, 有线键盘转蓝牙项目学习:记一次失败的尝试
  • 密码学:古典密码.
  • 创新驱动 共建生态|鲲鹏开发者峰会2023·GBASE南大通用技术论坛成功举办
  • Docker run命令
  • WebRTC源码目录结构
  • 欧几里得算法,辗转相除法的证明
  • 思科网络交换机配置命令(详细命令总结归纳)