C++ 类和实例对象,内存关系

这篇具有很好参考价值的文章主要介绍了C++ 类和实例对象,内存关系。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在 C++ 中,成员变量和成员函数的拷贝数量与它们是静态的还是非静态的有关。与此同时,使用 sizeof 操作符测量类和对象的大小时,也需要考虑这些因素。以下是综合这些方面的总结:

  1. 非静态成员变量:每个对象实例都有一份属于自己的成员变量拷贝。因此,如果创建了 N 个对象实例,内存中将有 N 份非静态成员变量的拷贝。使用 sizeof 测量类或对象的大小时,包括所有非静态成员变量所占用的内存,以及可能的内存对齐填充。
  2. 静态成员变量:在内存中只有一份拷贝,它们被类的所有对象实例共享。静态成员变量不属于任何特定对象实例,而是属于类本身。使用 sizeof 测量类或对象的大小时,静态成员变量不占用类实例的内存。
  3. 非静态成员函数:在内存中只有一份拷贝,与类的对象实例数量无关。这些函数通过一个隐式参数(通常称为 this 指针)访问特定对象实例的成员变量。尽管每个对象实例都有一个与之关联的函数指针,但成员函数的代码在内存中仅存在一份,为所有对象共享。使用 sizeof 测量类或对象的大小时,非静态成员函数不占用类实例的内存。
  4. 静态成员函数:在内存中也只有一份拷贝,与类的对象实例无关。静态成员函数属于类本身,而不属于任何特定对象实例。使用 sizeof 测量类或对象的大小时,静态成员函数不占用类实例的内存。

综上所述,使用 sizeof 测量类和对象的大小时,需要考虑非静态成员变量所占用的内存和可能的内存对齐填充。静态成员变量、非静态成员函数和静态成员函数不占用类实例的内存。在大多数情况下,使用 sizeof 测量类和对象的大小得到的结果是相同的,因为对象的内存分布与其所属类的内存分布相同。文章来源地址https://www.toymoban.com/news/detail-622244.html

到了这里,关于C++ 类和实例对象,内存关系的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 类和对象及其关系

    类概述: 类特点: 类的定义(成员变量 和 成员方法) 类的使用(创建对象) 概念::对象具有的各种特征 对象的创建 对象的使用 对象内存 栈内存中 使用完,自动消失。堆内存中必须使用垃圾回收器,在空闲时侯回收 类和对象的关系: 类是对象的抽象 , 对象是类的实

    2024年01月24日
    浏览(43)
  • <C++> 类和对象-面向对象

    C语言是 面向过程 的,关注的是过程,分析出求解问题的步骤, 通过函数调用逐步解决问题。 C++是基于 面向对象 的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。 C语言结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函

    2024年02月14日
    浏览(44)
  • C++类和动态内存分配

    C++能够在程序运行时决定内存的分配,而不是只在编译阶段,因此,就可以根据程序的需要,而不是根据一系列严格的存储类型规则来使用内存,C++使用new和delete运算符来动态控制内存,但是,在类中使用这些运算符会导致许多新的问题,在这种情况下,析构函数就是必不可

    2024年04月16日
    浏览(41)
  • <C++> 类和对象(上)-面向对象

    C语言是 面向过程 的,关注的是过程,分析出求解问题的步骤, 通过函数调用逐步解决问题。 C++是基于 面向对象 的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。 C语言结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函

    2024年02月11日
    浏览(50)
  • C++——类和对象(2)

    当一个类中什么都没有,编译器会帮类自动生成6个默认成员函数例如: 此篇文章主要围绕构造函数与析构函数进行讲解。  对于以上的Date类,每次实例化对象之后都要对对象调用Init()函数,比较繁琐,其实编译器就可以帮我们完成。 构造函数是一个特殊的成员函数,名字与

    2024年03月17日
    浏览(45)
  • 【C++】类和对象(上篇)

    🚩 C语言 是 面向过程 的, 关注 的是 过程 ,分析出求解问题的步骤,通过函数调用逐步解决问题 🚩 C++ 是基于 面向对象 的, 关注 的是 对象 ,将一件事情拆分成不同的对象,靠对象之间的交互完成 🌰 比如: C语言结构体中只能定义变量, 在C++中,结构体内不仅可以定

    2024年01月22日
    浏览(37)
  • c++学习——类和对象

    类是自定义数据类型,是C语言的结构体进化而成的 对象是类实例化出的,用数据类型定义一个变量 C和C++中struct区别: C语言struct只有变量 C++语言struct既有变量,也有函数 1、为什么要有封装? 封装是把属性(变量)和方法(函数)封装到类内,然后给这些数据赋予权限,防

    2024年02月07日
    浏览(36)
  • C++类和对象练习

    要求: (1)包含成员变量 m_a(立方体边长)。 (2)包含函数 SetA(doublea)(设置立方体边长)、GetVolume()(计算体积)、GetArea()(计算表面积)。 (3)包含函数 Display(),用来输出计算的结果。 (4)设计测试用主函数 main(),用来测试 Box 类。 包括: (1)普通数据成员:姓

    2023年04月18日
    浏览(38)
  • c++类和对象(封装)

            C++面向对象的三大特性为: 封装、继承、多态         C++认为万事万物都皆为对象,对象上有其属性和行为 例如:         人可以作为对象,属性有姓名、年龄、身高、体重...,行为有走、跑、跳、吃饭、唱歌...车也可以作为对象,属性有轮胎、方向盘、

    2024年02月08日
    浏览(47)
  • 【C++】类和对象-友元

    不在类外定义成员函数:

    2024年02月15日
    浏览(35)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包