C++对象模型
来源:互联网 发布:win10 手写笔软件 编辑:程序博客网 时间:2024/06/16 06:15
简单对象模型
简单对象模型:一个C++对象存储了所有指向成员的指针,而成员本身不存储在对象中。也就是说不论数据成员还是成员函数,也不论这个是普通成员函数还是虚函数,它们都存储在对象本身之外,同时对象保存指向它们的指针。示意图如右。
简单对象模型对于编译器来说虽然极尽简单,但同时付出的代价是空间和执行期的效率.显而易见的是对于每一个成员都要额外搭上一个指针大小的空间以及对于每成员的操作都增加了一个间接层.因此C++并没有采用这样一种对象模型,但是被用到了C++中“指向成员的指针”的概念当中。
表格驱动对象模型
表格驱动模型则更绝,它将对象中所有的成员都抽离出来在外建表,而对象本身只存储指向这个表的指针。右图可以看到,它将所有的数据成员抽离出来建成数据成员表,将所有的函数抽取出来建成一张函数成员表,而对象本身只保持一个指向数据成员表的指针。
侯大大认为,在对象与成员函数表中间应当加一个虚箭头,他认为这是Lippman的疏漏之处,应当在对象中保存指向函数成员表的指针。
然而我在这儿还是保留原书(而非译本)的截图,因为以我之拙见,不保存指向成员函数表的指针也没有妨碍。因为形如float Point::x() 的成员函数实际上相当于floatx(Point* )类型的普通函数,因此保存指向成员函数表的指针当属多此一举。
当然C++也没有采用这一种对象模型,但C++却以此模型作为支持虚函数的方案。
C++对象模型
所有的非静态数据成员存储在对象本身中。所有的静态数据成员、成员函数(包括静态与非静态)都置于对象之外。另外,用一张虚函数表(virtual table)存储所有指向虚函数的指针,并在表头附加上一个该类的type_info 对象,在对象中则保存一个指向虚函数表的指针。如下图:
- Objective-C对象模型
- Objective-C对象模型
- objective C 对象模型
- C ++ 对象模型
- Objective-C 对象模型
- 【C++】对象模型
- Objective-C对象模型
- C/C++的对象模型
- Objective-C的对象模型
- 图解Objectvie-C对象模型
- C/C++的对象模型
- Objective-C对象模型--类对象和元类对象
- 深度探索C++对象模型
- Objective-C 对象和消息模型
- Objective-C对象模型及应用
- Objective-C对象模型及应用
- Objective-C对象模型及应用
- Objective-C对象模型及应用
- OSGi介绍及OSGi的Bundle应用
- 基于SSE指令集的程序设计简介
- 基于mini2440的mp3播放器
- NeNe opengl 纹理映射
- DLL文件(未完结)
- C++对象模型
- 竟然不能评论!!!!! 网管给个说法
- ASP.NET不用页面跳转方式的区别及页面间传值方法
- linux export命令参数及用法详解--linux设置环境变量命令
- 有大神若看到此文章,烦请帮忙解决。谢谢!!!
- oracle触发器实例
- 连通图的割点、割边 连通图的割点、割边(桥)、块、缩点,有向图的强连通分量
- 看的比较新鲜的vim的使用说明 vi( ....这个用法不错。转来了
- 编制一个三角函数表(0°~90°)