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日
    浏览(5)
  • <C++> 类和对象-面向对象

    <C++> 类和对象-面向对象

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

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

    C++类和动态内存分配

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

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

    <C++> 类和对象(上)-面向对象

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

    2024年02月11日
    浏览(9)
  • C++:类和对象(中)

    C++:类和对象(中)

    如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时, 编译器会自动生成以下6个默认成员函数。 默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数 class Date {}; 对于Date类,可以通过 Init 公有方

    2024年02月03日
    浏览(12)
  • c++类和对象(封装)

    c++类和对象(封装)

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

    2024年02月08日
    浏览(8)
  • C++ [类和对象 - 下]

    C++ [类和对象 - 下]

            本文已收录至《 C++语言 》专栏! 作者: ARMCSKGT        目录   前言 正文 初始化列表 成员变量的定义与初始化 初始化列表的使用 变量定义顺序 explicit 隐式类型转换 自定义类型隐式转换  explicit 限制转换 关于static static声明类成员 友元 友元函数 友元函数

    2023年04月08日
    浏览(11)
  • 【c++】类和对象(七)

    【c++】类和对象(七)

    🔥个人主页 : Quitecoder 🔥 专栏 : c++笔记仓 朋友们大家好,本篇文章来到类和对象的最后一部分 声明为static的 类成员 称为 类的静态成员 ,用static修饰的成员变量,称之为 静态成员变量 ;用static修饰的成员函数,称之为 静态成员函数 。 静态成员变量一定要在类外进行

    2024年04月09日
    浏览(7)
  • 【C++】类和对象(上)

    【C++】类和对象(上)

    个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【C++之路】 C语言是面向过程的,而C++是面向对象的,那面向过程和面向对象到底是什么呢? 我们拿一个非常典型的 外卖系统 来进行举例: 面向过程: 我们知道外面

    2024年02月02日
    浏览(12)
  • 【C++】类和对象

    【C++】类和对象

    C++兼容C,C语言的struct的用法在C++还适用,但同时C++也将struct升级为类,类不仅可以定义变量,还可以定义函数。 class为定义类的,name是类的名字,{}内是类的主体。 类的两种定义方式 声明和定义全部放在类体中。如果成员函数在类中定义,那么编译器可能将其当成

    2024年02月06日
    浏览(8)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包