深度探索C++对象模型读书笔记(一)
《深度探索C++对象模型》这本书也算是学习C++面向对象编程的必备书了,打算花上几天先简单的看一遍,这种书看上好几遍也不一定能理解太多,慢慢积累一点一滴吃透就好。下面把我看书过程中觉得比较有意义的摘录下来,也算是一种总结了。
第一章 关于对象
第一章首先谈到了C++在C的基础上增加对象封装之后所需要的一些成本,总结一下就是面向对象设计的C++在结构的封装上并不比C复杂太多,每个object中也只包含了data member,member function并不会包含在对象实体之中,面向对象特性所产生的布局以及时间上的额外负担主要由virtual引起,以下是原文叙述:
C++对象模型
C++对象模型如下图所示,所需要注意的就是每个存在虚函数的类都会有一个vtbl虚函数表数据结构,表中存在该类所有虚函数的地址指针,还存在该类的type_info 作为RTTI信息。类中所有的static成员全部分配在object之外。
关键词struct和class
书中关于这两个关键词讲了很多,有点繁杂了,在我看来记住以下几点就差不多了:
1.struct和class关键词并没有太多差距,都能够用来组装数据结构,最显著的区别就是struct内成员默认访问权限为public,而class的默认访问权限是private
2.struct和class更多的是C语言结构体和C++类两种数据组装理念的区别,前者只有数据,而后者把数据和方法进行了组合。
3.struct在C语言中存在许多trick,特别是其成员内存分配总是顺序的,这使得我们能够很方便的通过转换指针类型对其成员实现访问。而C++由于存在virtual机制的存在,其Object中的成员内存分配顺序不定,在这方面的使用需要慎重。
C++多态的实现
C++对象内存的真正分配
主要有三部分:
1.非静态数据成员
2.内存对齐所需空间,见另一篇文章https://www.cnblogs.com/J1ac/p/9039955.html
3.虚函数实现多态的开销,一般指虚函数指针