inside C++笔记之C++对象模型
来源:互联网 发布:linux mysql root权限 编辑:程序博客网 时间:2024/04/28 06:01
首先看下Point类
i.简单对象模型,
在这个模型中,一个object是一系列的slots,每一个slot指向一个member.Members按其声明次序,各被指定一个slot,每一个data member 或 function member 都有自己的一个slot.
如果所示:
在简单模型中,Member本身并不放在object之中,只有“指向member的指针”才放在object内,这么做可以避免“members有不同的类型,因而需要不同的存储空间”所招致的问题Object中的member是根据索引来寻址,object的大小是member数乘以指针大小。这个模型的关于索引或slot数目的观念被应用到C++的“指向成员的指针”观念之中。
ii. 表格驱动对象模型
这个模型中把所有membert相关的信息全部抽取出来,放在两个table中:data member table和function member table.。function member talbe是一系列的slots,每个slot指向一个member function。Data member table 包含data的本身。Object包含指向这两个talbe的指针。
如图所示:
这个模型的member function table这个观念应用到C++模型中的vitrual functions中。
iii.C++对象模型
这个模型中,nonstatic data member被配置在每一个object内,static data member被放置在object之外。无论是nonstatic function member或是static function member都放置在object之外。对virtual function有两个步骤:
1. 每一个object产生一堆指向virtual function的指针,把这些指针放在一个table中,称之为virtrual talbe(vtbl)
2. 每一个object添加一个指向这个vtbl的指针,称之为vptr。Vptr的设定和重置都是由每一个class的constructor,destructor和copy assignment运算符自动完成。每一个class所关联的type_info object也经由virtual table被指出来,通常放在表格的第一个slot处。
这个模型的主要优点是空间和存取时间的效率,主要缺点则是,如果应用程序的代码本身未曾改变,但所用到的class objects的nonstatic data members有所修改(增加,删除或更改),那么那些应用程序用样重新编译。
- inside C++笔记之C++对象模型
- 《Inside C#》笔记(三) 数据类型
- 《Inside C#》笔记(四) 类
- 《Inside C#》笔记(五) 方法
- 《Inside C#》笔记(七) Attribute
- 《Inside C#》笔记(八) 接口
- 《Inside C#》笔记(十四) 反射
- 《Inside C#》笔记(一) .NET平台
- 《Inside C#》笔记(二) 初识C#
- 《Inside C#》笔记(十一) 运算符重载
- 《Inside C#》笔记(十二) 委托与事件
- 《Inside C#》笔记(十三) 多线程 上
- 《Inside C#》笔记(十三) 多线程 下
- 《Inside C#》笔记(完) 程序集
- Objective-C对象模型
- Objective-C对象模型
- objective C 对象模型
- C ++ 对象模型
- VC的一些技巧
- CSS中浮动与定位的理解(2010072920)
- error LNK2005 已经在 obj 中定义 错误
- 计算机世界“粗口”事件:该骂的不只是腾讯
- MySQL5.1安装配置图解
- inside C++笔记之C++对象模型
- 百度只收录首页解决妙招
- 连接数据库的代码 (P187 已无误 )
- 如何在.NET中访问MySQL数据库
- Struts2 json plugin实战1
- 用OpenInventor实现的NeHe OpenGL教程-第八课
- linux下常用压缩格式的压缩与解压方法
- 向数据库中添加数据的代码 (P191 已无误 )
- 用OpenInventor实现的NeHe OpenGL教程-第九课