《深度探索c++对象模型》笔记总结(一)

首先先明确一个宗旨及两个概念:

宗旨:C++在布局及存取时间上主要的额外负担是由virtual引起的

1.虚函数:C++多态的基本实现,没什么好说的,详细见如下打包笔记:虚函数

2.虚基类:用来处理菱形继承时候,在派生类中数据有重复的问题,见笔记:虚基类

-----------------------------------------------------------------------------------------------------------------

三种对象模式

  • 简单对象模式

这个没什么好说的,在object中存储的是地址(指针),按序指向每个声明的函数或者数据。

此时一个class object的大小计算:指针大小*class中声明的member个数

  • 表格驱动的对象模型

和上面不同的是:此时我将数据和函数进行分开,同样在object中存的还是指针,一个指向data成员,一个指向function。但是在这里一点需要注意:在Member Data Table中存的是实际的数据元素;Function Member Table中存的仍然是函数的地址

  • C++对象模型

此时需要特别关注了,因为这里引出了一个C++中非常重要的概念:虚函数表(过段时间总结完后把这个链接加上)

此时先注意一点,只有nonstatic data member是存在object内部的,其余全部存在外部,并且对于virtual的函数,两个步骤重要:

1.每个class产生一堆指向virtual functions的指针,并且放在表格之中(虚表)

2。每个class object被安插一个指针,指向相关的virtual table。称为vptr。每一个class所关联的type_info_object(用以支持RTTI)放在表格的第一个位置

 

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值