深入探索c++对象模型->1.1c++对象模式
2016-08-20 15:52
162 查看
一、c++有三种c++对象模型:
1、简单对象模型:每个object是一系列的slots,每一个data member或function member(static、virtual、nonstatic)都有自己的一个slot。
2、表格驱动模型:每个object含有两个指针,这两个指针分别指向data member table和member function table。Member function table是一系列的slots,每一个slot指出一个member function;
Data member table则直接持有data本身。(ps:member function table这个概念为支持virtual functions提供了有力支持)。
3、C++对象模型:static data members、static和nonstatic function members被放在个别的class object之外;每个nonstatic data members被直接存放于class object之内;至于virtual functions通过以下步骤:每个objec存有一个vptr,vptr指向vtbl,vtbl中存放着一堆指向virtual functions的slots。(ps:每一个class所关联的type_info object也经由virtual table被指出来,通常被放在表格的第一个slot内。、
二、继承关系在对象模型中是如何存在的呢?
1、简单对象模型:对于每一个base class,被一个内在的slot指出。
2、表格驱动模型:存在一个base table,内含一系列slots指向base class。
3、C++对象模型:每一个base class的data members被直接存放于derived class内。(ps:virtual base class处理方式以后补充)
三、对象模型是如何影响程序的?通过以下一个程序及其内部转换来说明:
这段代码实际上被内部转换成:
对象模型影响着代码实际转换过程。
1、简单对象模型:每个object是一系列的slots,每一个data member或function member(static、virtual、nonstatic)都有自己的一个slot。
2、表格驱动模型:每个object含有两个指针,这两个指针分别指向data member table和member function table。Member function table是一系列的slots,每一个slot指出一个member function;
Data member table则直接持有data本身。(ps:member function table这个概念为支持virtual functions提供了有力支持)。
3、C++对象模型:static data members、static和nonstatic function members被放在个别的class object之外;每个nonstatic data members被直接存放于class object之内;至于virtual functions通过以下步骤:每个objec存有一个vptr,vptr指向vtbl,vtbl中存放着一堆指向virtual functions的slots。(ps:每一个class所关联的type_info object也经由virtual table被指出来,通常被放在表格的第一个slot内。、
二、继承关系在对象模型中是如何存在的呢?
1、简单对象模型:对于每一个base class,被一个内在的slot指出。
2、表格驱动模型:存在一个base table,内含一系列slots指向base class。
3、C++对象模型:每一个base class的data members被直接存放于derived class内。(ps:virtual base class处理方式以后补充)
三、对象模型是如何影响程序的?通过以下一个程序及其内部转换来说明:
X foobar() { X xx; X* px = nex X; //foo()是一个virtual function xx.foo(); px->foo(); delete px; return xx; }
这段代码实际上被内部转换成:
void foobar(X& _result) { _result.X::X(); px = _new(sizeof(X)); if(px != 0) px->X::X(); foo(&_result); (*px->vtbl[2])(px); if(px !=0 ) { (*px->vtbl[1])(px); _delete(px); } return; }
对象模型影响着代码实际转换过程。
相关文章推荐
- 深入探索c++对象模型->2.2 Copy Constructor的构造操作
- 深入探索C++对象模型->1.3对象的差异
- C++ 零散知识点速记 -- <深入探索C++对象模型> 读书笔记
- 深入探索C++对象模型->2.4成员们的初始化队伍
- 深入探索C++对象模型->2.1 Default Constructor的构造操作
- 【深入探索c++对象模型】C++新手的两种常见误解
- 【深入探索c++对象模型】类对象所需内存大小讨论
- 深入探索C++对象模型(6)
- 深入探索C++对象模型(1) 关于对象(思维导图)
- 深入探索C++对象模型 第七章 站在对象模型的尖端
- 深入探索C++对象模型 之 执行期语意学
- 深入探索C++对象模型--详解深拷贝与浅拷贝以及拷贝构造的建构
- 深入探索C++对象模型(2)
- 深入探索C++对象模型 第二章 构造函数语意学
- 深入探索C++对象模型 读书笔记
- 《深入探索C++对象模型》读后感
- 深入探索C++对象模型(1)
- 深入探索C++对象模型笔记之六 —— Data语意学
- 深入探索C++对象模型笔记之四 —— 构造函数语意学 (Copy Constructor的建构操作)
- 深入探索C++对象模型(1)