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

C++的三种对象模型

1.介绍

        在C++中,对象模型是指C++编译器如何实现对象的布局、内存分配、成员函数调用等机制。C++的对象模型主要有三种,分别是:简单对象模型、表格驱动对象模型、C++对象模型。

2.简单对象模型

        (1)在这种模型中,对象仅包换数据成员,而成员函数则被当成普通函数处理,不存储在对象中。

        (2)每个对象只包含数据成员的指针,成员函数的调用通过函数指针表来实现。

        (3)这种模型简单,但效率较低,因为每次调用成员函数都需要通过函数指针表来查找。

        C++并没有采用这样一种对象模型,但被用到了C++中“指向成员的指针”概念中。

3.表格驱动对象模型

        (1)这种模型使用两个表格来管理对象:一个表格存储数据成员,另一个表格存储成员函数的指针。

        (2)对象本身只包含指向这两个表格的指针。

        (3)这种模型支持多态性、虚函数的调用通过虚函数表来实现。

        C++也没有采用这种对象模型,但却以此模型作为支持虚函数的方案。

4.C++对象模型

        (1)这是C++标准中实际使用的对象模型,结合了简单对象模型和表格驱动对象模型的特点。

        (2)对象包含数据成员和指向虚函数表的指针(如果有虚函数)。

        (3)非虚函数成员不存储在对象中,而是通过普通的函数调用机制来处理。

        (4)虚函数的调用通过虚函数表来实现,支持运行时多态。

        (5)这种模型在效率和灵活性之间取得了平衡。

5.C++对象模型的要点

  • 数据成员:存储在对象的内存布局中,每个对象都有自己的一份数据成员副本。

  • 成员函数:非虚成员函数不存储在对象中,而是通过普通的函数调用机制来处理。虚函数通过虚函数表(vtable)来实现多态。

  • 虚函数表(vtable):每个包含虚函数的类都有一个虚函数表,表中存储了指向虚函数的指针。对象中包含一个指向该表的指针(通常称为vptr)。

  • 继承和多态:通过虚函数表和vptr实现运行时多态。

如有错误,敬请指正!!!

相关文章:

  • 项目访问使用 docker bridge 网络模式(端口映射)配置详解
  • 全域旅游景区导览系统:赋能智慧旅游生态,破解行业核心难题
  • 外发抄板SCH与PCB检查系列
  • React七Formik
  • 2025.2.25学习内容
  • 【python随手记】——读取文本文件内容转换为json格式
  • 【机器学习】梯度下降法及使用一元二次方程模拟使用梯度下降法的代码实现
  • 45.matlab产生正弦叠加信号
  • 系统运维方案,系统运维的主要工作内容和运维检查单等资料,设备监控,设备运维检查(Word)
  • Redis 中有序集合(Sorted Set)的使用方法
  • java进阶学习IO流
  • 大厂都在用的前端换肤方案:多品牌适配 + 夜间模式全解析
  • Vue 3 零基础入门:从计数器应用开始你的工程化之旅 - 深入理解 Vue 3 响应式系统
  • 详解 torch.triu:上三角矩阵的高效构造(中英双语)
  • Linux 之 Centos 安装Consul
  • maven Problem shading JAR的几个解决方案
  • java进阶学习脑图
  • deepseek_v3_base和deepseek_r1_zero和deepseek_r1
  • 【深入浅出:Core-JS Legacy 的降级兼容指南】
  • Filter-入门
  • 建设银行网站查询工资/微信crm客户管理系统
  • 税务网站做新办户登记表/做小程序的公司
  • 高端网站设计元素图片/安仁网络推广
  • 深圳做生鲜食材的网站叫什么/广州seo软件
  • 长春网站建设多少钱/制作电商网站
  • wordpress 指定阅读/seo代码优化工具