C++结构体分别在:栈空间、堆空间、静态存储区中初始化

这篇具有很好参考价值的文章主要介绍了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 运算符初始化

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

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

到了这里,关于C++结构体分别在:栈空间、堆空间、静态存储区中初始化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++】【数据结构】循环队列的基本操作(初始化、入队、出队、取队头元素、遍历输出队列、求队列长度)顺序队列的算法实现【附全代码】

    使用c++完成数据结构循环队列的基本操作,包括(初始化、入队、出队、取队头元素、遍历输出队列、求队列长度等),可直接编译运行。 队列 又称为 “先进先出” (FIFO)线性表。限定插入操作只能在队尾进行,而删除操作只能在队首进行。 循环队列 ——采用 顺序存储结构

    2023年04月16日
    浏览(53)
  • 【Java】Java中类的初始化顺序(静态方法,静态块,非静态块,最后有流程图)

       📝个人主页:哈__ 期待您的关注  在日常使用Java的时候,我们都接触过 new 这个,那你是否知道在我们的对象真正创建出来之前都做了哪些事情呢? 实际上要去判断一个类的初始化的顺序,需要分一下情况,一种是没有继承关系的类(不考虑 Object 类),一种是有

    2024年04月11日
    浏览(40)
  • pthread 变量静态初始化 避免使用被销毁过的变量

    互斥锁: pthread_mutex_t g_mutex = PTHREAD_MUTEX_INITIALIZER; 读写锁: pthread_rwlock_t g_rwlock = PTHREAD_RWLOCK_INITIALIZER; 条件变量: pthread_cond_t g_cond = PTHREAD_COND_INITIALIZER; 以互斥锁为例,当持有互斥锁的线程,需要进行互斥锁的销毁工作时,无法确保当前没有任何其他线程会在锁销毁之后,仍

    2024年02月06日
    浏览(43)
  • 4.【CPP】入门(初始化列表||explicit||static||友元||静态成员变量/函数)

    我们知道在c++11中才能在成员对象声明时初始化,像下面这样。 注意:构造函数不是初始化,而是赋初始值。那么在c++11以前该怎么初始化成员变量呢? 每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次) 类中包含以下成员,必须放在初始化列表位置进行初始

    2024年01月20日
    浏览(42)
  • android存储3--初始化.unlock事件的处理

    android版本:android-11.0.0_r21 http://aospxref.com/android-11.0.0_r21 概述:SystemServiceManager收到unlock事件后,遍历service链表,执行各个service的onUserUnlocking。对于存储service,执行的是StorageManagerService$Lifecycle中的 onUserUnlocking,在这个方法中,存储的 StorageSessionController、vold、storaged模块进行

    2024年02月10日
    浏览(52)
  • android存储4--初始化.emulated设备的挂载

    android版本:android-11.0.0_r21 http://aospxref.com/android-11.0.0_r21 android手机的挂载非常复杂。这篇文章针对emulated存储,介绍它的挂载过程。 android早期,手机内部flash容量比较小,为了能让手机存放更多的文件,需要通过外部存储(如SD卡)来扩展存储容量。随着技术的进步,大容量

    2024年02月15日
    浏览(111)
  • [数据存储]HDFS的简介、初始化配置与运行

    HDFS(Hadoop Distributed File System)Hadoop分布式文件系统,是Hadoop项目中关于数据存储的组件,是Hadoop项目的一部分。 HDFS采用主从模式的分布式存储方式存储文件。对于超大的数据而言,单个服务器无法承担对改数据的存储和读取工作。所以采用分布式的架构对文件进行存储。

    2024年02月12日
    浏览(49)
  • 【ROS+gazebo】无人机开发一:安装ros+gazebo+创建并初始化ros工作空间

    Hello,大家好!最近由于课题需要开始摸索ros+gazebo内容,主要做多无人机的协同仿真,准备写成一个系列,想要学习的朋友可以订阅我的频道。 我的电脑配置:ubuntu20.04 目标安装:ROS noetic版本+gazebo11 好的,下面让我们一起开始吧! 先用几句话介绍一下,首先,gazebo 是仿真

    2024年02月13日
    浏览(39)
  • 某60区块链安全之未初始化的存储指针实战一学习记录

    学会使用python3的web3模块 学会分析以太坊智能合约未初始化的存储指针漏洞 找到合约漏洞进行分析并形成利用 Ubuntu18.04操作机 python3 在solidity语言中,像动态的数组、struct、mapping这样的复杂数据结构是不能直接在”栈”里面保存的,因为”栈”里只能保存单独的”字”,也就

    2024年02月03日
    浏览(42)
  • 某60区块链安全之未初始化的存储指针实战二学习记录

    学会使用python3的web3模块 学会分析以太坊智能合约未初始化的存储指针漏洞 找到合约漏洞进行分析并形成利用 Ubuntu18.04操作机 python3 在solidity语言中,像动态的数组、struct、mapping这样的复杂数据结构是不能直接在”栈”里面保存的,因为”栈”里只能保存单独的”字”,也就

    2024年02月05日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包