一个类有多个基类的内存布局
没有虚函数时
- /// @file test_class.c
- /// @brief 测试一个类有多个基类的内存布局(没有虚函数时, 有虚函数时)
- #include <stdlib.h>
- #include <stdio.h>
- class CA {
- public:
- CA() : iA(1) {}
- int iA;
- };
- class CB : public CA {
- public:
- CB() : iB(2) {}
- int iB;
- };
- class CC : public CB {
- public:
- CC() : iC(3) {}
- int iC;
- };
- void fnTest()
- {
- CC a;
- /**
- 0018FEE4 01 00 00 00 .... ///< 顶层基类CA数据
- 0018FEE8 02 00 00 00 .... ///< 基类CB数据
- 0018FEEC 03 00 00 00 .... ///< 本类CC数据
- */
- }
- int main(int argc, char *argv[])
- {
- fnTest();
- return 0;
- }
有虚函数时
- /// @file test_class.c
- /// @brief 测试一个类有多个基类的内存布局(没有虚函数时, 有虚函数时)
- #include <stdlib.h>
- #include <stdio.h>
- class CA {
- public:
- CA() : iA(1) {}
- virtual ~CA() {}
- int iA;
- };
- class CB : public CA {
- public:
- CB() : iB(2) {}
- virtual ~CB() {}
- int iB;
- };
- class CC : public CB {
- public:
- CC() : iC(3) {}
- virtual ~CC() {}
- int iC;
- };
- void fnTest()
- {
- CC a;
- /**
- 0018FEE4 1C 20 42 00 . B. ///< 本类CC虚函数表
- 0018FEE8 01 00 00 00 .... ///< 顶层基类CA数据
- 0018FEEC 02 00 00 00 .... ///< 基类CB数据
- 0018FEF0 03 00 00 00 .... ///< 本类CC数据
- */
- }
- int main(int argc, char *argv[])
- {
- fnTest();
- return 0;
- }
http://blog.csdn.net/lostspeed/article/details/50559412