本文主要是介绍深度探索C++ 对象模型(7)-Data member的布局(无继承、继承无多态、继承多态、多层继承),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
- 无继承
- 继承无多态
- 继承多态
虚表 :
- 用来存放基类的每一个虚函数,再加上首位的一个slots(支持RTTI)。
- 每个class object导入一个vptr,提供执行期的链接,使得每一个class object都能找到虚函数表。
- constructor中生成vptr的初值,让其指向虚表。
- destructor销毁
vptr前端模式:丧失了与C的兼容性、丧失了多态
- 多层继承
namespace ObjectConDerived{class Concrete1 {public:// ...protected:int val;char bit1;}; class Concrete2 : public Concrete1 {public:// ...protected:char bit2;}; class Concrete3 : public Concrete2 {public:// ...protected:char bit3;}; void test(){ cout << "Concrete1类、Concrete2类、Concrete3类的大小:" << sizeof(Concrete1) << " " << sizeof(Concrete2) << " " << sizeof(Concrete3) << endl; }
}
ObjectConDerived::test();//执行结果为:Concrete1类、Concrete2类、Concrete3类的大小:8 12 16
空间似乎”浪费了”, 但如果不浪费,则copy 对象时数据会不对
【引用】
[1]: <<深度探索C++ 对象模型 Inside The C++ Object Model >> Stanley B.Lippman 候捷 译
[2]: 代码地址 https://github.com/thefistlei/cplusStudy.git
这篇关于深度探索C++ 对象模型(7)-Data member的布局(无继承、继承无多态、继承多态、多层继承)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!