C++对象模型读书笔记-- 虚表 virtual table
来源:互联网 发布:linux home目录不见了 编辑:程序博客网 时间:2024/06/08 16:29
摘录侯杰《深度探索C++对象模型》 第一章---关于对象 P13
1. 虚表
函数定义
X foobar()
{
X xx;
X* px = new X;
//foo() 是一个virtual function
xx.foo();
px->foo();
delete px;
delete xx;
}
这个函数在内部的转化为虚拟C++代码:
void foobar(X& _result)
{
//构造_result
//用来取代 local xx
_result.X::X();
//扩展X* px = new X;
px = _new (sizeof(x));
if(px != 0)
px->X::X();
//扩展xx.foo, 但不使用virtual 机制
//以_result取代xx
foo(&result);
//使用virtual 机制扩展px->foo()
(*px->vtbl[2]) (px);
//扩展delete px;
if( px!=0)
{
(*px->vtbl[1]) (px); // destructor
_delete(px);
}
//无须使用 name return statement
// 无须摧毁 local object xx
return;
}
这个例子,充分的说明了虚表(virtual Table)的使用。 每个class object都有一个虚表指针。 虚表的不同行对应了虚函数,析构函数。
2. 需要多少内存才表表现一个class object
a) 其nonstatic data member
b) 加上任何由于alignment的需求,而补齐的空间(字节对齐)。 32位机,通常alignment为4bytes
c) 加上为了支持virtual而内部产生的任何额外负担(overhead)
- C++对象模型读书笔记-- 虚表 virtual table
- 虚表(C++)virtual table
- 虚表(C++)virtual table
- 虚表(C++)virtual table
- virtual table(虚表)
- C++对象模型-读书笔记
- 《C++对象模型》读书笔记
- 【C++】深度探索C++对象模型之虚拟成员函数(virtual member function)
- VS2005之virtual继承对象模型
- c++对象模型读书笔记一
- C++对象模型读书笔记(一)
- C++对象模型读书笔记(二)
- C/C++编译器中虚表是如何完成的 The virtual table
- C++: Accessing the virtual table directly(盗版)
- C/C++编译器中虚表是如何完成的 The virtual table
- 深度理解C++对象模型读书笔记——对象模型
- Objective-C对象模型
- Objective-C对象模型
- maven编码GBK的不可映射字符
- Mac强制清空废纸篓
- 笔试题:用二叉树构造双向链表
- nyoj 33 蛇形填数【循环+数组】
- Android audio framework的一些业务流程
- C++对象模型读书笔记-- 虚表 virtual table
- 标题:AVL树的基本操作例程(1)
- iOS程序员面试题系列(3)
- poj 2887 Big String
- oracle触发器如何调试
- ArrayIndexOutOfBoundsException: 16384
- MFC应用程序框架分析
- AVL树的基本操作之插入(递归与非递归编码)(2)
- Fedora 21 x86_64 上运行32位软件