C++的对象模式有三种:简单对象模型、表格驱动对象模型、C++对象模型
1.简单对象模型
在这个模型中,object中有一系列的slot,每个slot指向一个member。
2.表格驱动对象模型
在这个模型中,object有两个slot分别存放指向data member table和member function table的指针。而这两个表格分别含有slot指向data member和 member function
3.C++对象模型
在这个模型中,Nonstatic data members被配置于每一个object之内,static data members、static和nonstatic function members被放在所有的class object之外。(注:这就是为什么在计算一个类对象的大小时是不将static和非虚函数计入其中的)。对应virtual function,class会产生一个表格 virtual table(vtbl),表格中存放指向虚函数的指针,而在每一个class object中存在一个指针,指向相关的vtbl,这个指针通常称为vptr。(注:这就是为什么在计算有虚函数的类对象时,只计入一个指向虚表的指针)。
可以参考这篇文章,查看类的排布https://blog.youkuaiyun.com/sinat_33442459/article/details/77714568
假设下面这个类
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;
};
在vs2013中的排布