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

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实现运行时多态。

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


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

相关文章:

  • vmware系统磁盘扩容
  • 【Java项目】基于Spring Boot的交流互动系统
  • 代码随想录|01背包理论基础,01背包之滚动数组,416.分割等和子集
  • Python入门12:面向对象的三大特征与高级特性详解
  • SOME/IP-SD -- 协议英文原文讲解3
  • WPS中如何对word表格中数据进行排序,就像Excel排序那样简单
  • MVC MVP MVVM架构 在Android中的体现
  • javascript-es6 (五)
  • pytest下allure
  • MySQL索引失效
  • ROS的action通信——实现阶乘运算(三)
  • openstack ironic ipa 以及用户镜像制作
  • 企业如何通过云计算提高数据的可访问性
  • Siddon算法中对参数值α的解释
  • java给钉钉邮箱发送邮件
  • RK3399 Android7双WiFi功能实现
  • 灵犀互娱游戏测试开发一面面经
  • 音视频入门基础:RTP专题(12)——RTP中的NAL Unit Type简介
  • GGUF 文件格式全解析
  • Spring Boot 中的日志管理