《深度探索C++对象模型》系列之(一)
来源:互联网 发布:合金装备知乎 编辑:程序博客网 时间:2024/06/05 06:31
最近在看《深度探索C++对象模型》,不得不说这是一本好书,一本难得的好书,对C++的内在进行了详细的说明,让我读起来,一发不可收拾;最后,发自内心的感叹,真的是一本好书,一本学习C++的必读之作。
从这篇博文开始,我将把自己读《深度探索C++对象模型》时的感悟,以博文的形式和大家进行分享;由于《深度探索C++对象模型》写的有深度,有的地方我也可能理解不到位,希望大家拍砖。
引用书中的话,C++老手分成两种:一种是把语言用的熟烂的;另一种人不但如此,还对于台面下的机制有莫大的兴趣。当然了,我在正往另一种人的地步发展,希望自己走的好。
C++对象模型
在C++中,有两种class data members:static和nonstatic,以及三种class member functions:static、nonstatic和virtual。这个知识点是很好理解的。例如,下面这个类,在内中是如何存放的:
class Point{public:Point(float xval);virtual ~Point();float x()const;static int PointCount();protected:virtual ostream &print(ostream &os)const;float _x;static int _point_count;};
在实际生产中,遇到一个复杂的类,如果能看出这个类的内存模型结构,那么以后的操作基本就没有难度的;所以说,学会分析一个类的内存模型,是每一个C++程序员必须要会的知识。在C++对象模型中,非静态数据成员被配置在每一个class object之内,静态数据成员则被存在个别的class object之外,静态和非静态也被放在个别的class object之外。而虚拟函数的实现则不同。虚拟函数的实现
1.每一个class产生一堆指向虚函数的指针,放在表格之中,这个表格被称为virtual table(vtbl);
2.每一个class object被安插一个指针,指向相关的virtual table。这个指针通常被称为vptr。vptr的设定和重置都由每一个类的构造函数、析构函数和赋值操作符重载函数自动完成。每一个类所关联的type_info object也经由virtual table被指出来,通常放在表格的第一个slot。
如上图所示,就是上述类的C++对象模型。
- 《深度探索C++对象模型》系列之(一)
- 《深度探索C++对象模型》系列之(二)
- 【C++】深度探索C++对象模型之Function语意学
- 深度探索C++对象模型笔记(一)
- 《深度探索C++对象模型》笔记(一)
- 深度探索C++对象模型笔记(一)
- 《深度探索C++对象模型》笔记(一)
- 深度探索c++对象模型——读书笔记(一)
- 《深度探索c++对象模型》读书笔记(一)
- 《深度探索C++对象模型》读书笔记(一)
- 《深度探索C++对象模型》读书笔记[一]
- 深度探索C++对象模型(一)
- 深度探索C++对象模型笔记<一>
- 深度探索C++对象模型
- 【C++】深度探索C++对象模型之站在对象模型的顶端
- 深度探索C++对象模型之(三)
- 深度探索C++对象模型之(四)
- 深度探索C++对象模型之(五)
- 快速提取Word中的图片的技巧
- linux 虚拟机卸载virbr0
- Java swing开发|Java实现窗体隐藏
- 从菜鸟到专家的五步编程语言学习法
- ARM Linux内核驱动异常定位方法分析--反汇编方式
- 《深度探索C++对象模型》系列之(一)
- 如何编写出优美的JavaScript代码?(不仅仅是js)
- 席慕蓉的话,足以震碎整个心
- linux移植-------------从下载init.bin 到烧写文件系统
- HDOJ2084 数塔(经典的动态规划问题)
- 颜色码对照表
- C#实现判断字符是否为中文
- Radio button with Jquery Mobile apply styling!!
- Servlet学习笔记