1.介绍
在C++中,对象模型是指C++编译器如何实现对象的布局、内存分配、成员函数调用等机制。C++的对象模型主要有三种,分别是:简单对象模型、表格驱动对象模型、C++对象模型。
2.简单对象模型
(1)在这种模型中,对象仅包换数据成员,而成员函数则被当成普通函数处理,不存储在对象中。
(2)每个对象只包含数据成员的指针,成员函数的调用通过函数指针表来实现。
(3)这种模型简单,但效率较低,因为每次调用成员函数都需要通过函数指针表来查找。
C++并没有采用这样一种对象模型,但被用到了C++中“指向成员的指针”概念中。
3.表格驱动对象模型
(1)这种模型使用两个表格来管理对象:一个表格存储数据成员,另一个表格存储成员函数的指针。
(2)对象本身只包含指向这两个表格的指针。
(3)这种模型支持多态性、虚函数的调用通过虚函数表来实现。
C++也没有采用这种对象模型,但却以此模型作为支持虚函数的方案。
4.C++对象模型
(1)这是C++标准中实际使用的对象模型,结合了简单对象模型和表格驱动对象模型的特点。
(2)对象包含数据成员和指向虚函数表的指针(如果有虚函数)。
(3)非虚函数成员不存储在对象中,而是通过普通的函数调用机制来处理。
(4)虚函数的调用通过虚函数表来实现,支持运行时多态。
(5)这种模型在效率和灵活性之间取得了平衡。
5.C++对象模型的要点
-
数据成员:存储在对象的内存布局中,每个对象都有自己的一份数据成员副本。
-
成员函数:非虚成员函数不存储在对象中,而是通过普通的函数调用机制来处理。虚函数通过虚函数表(vtable)来实现多态。
-
虚函数表(vtable):每个包含虚函数的类都有一个虚函数表,表中存储了指向虚函数的指针。对象中包含一个指向该表的指针(通常称为vptr)。
-
继承和多态:通过虚函数表和vptr实现运行时多态。
如有错误,敬请指正!!!