c++ 类的内存布局 菱形继承

    技术2026-02-10  17

    菱形继承

      菱形继承的方法如下:

    class A { public: A(int a) :ma(a) {} public: int ma; }; class B :public A { public: B(int b) :A(b),mb(b) {} public: int mb; } class C :public A { public: C(int b) :A(b), mc(b) {} public: int mc; } class D :public B, public C { public: D(int d) :B(d), C(d), md(d) {} public: int md; };

    类D的内存布局如下:

    加入虚继承
    class A { public: A(int a) :ma(a) {} public: int ma; }; class B :public A { public: B(int b) :A(b),mb(b) {} public: int mb; }; class C :public A { public: C(int b) :A(b), mc(b) {} public: int mc; }; class E { public: E(int e) :me(e) {} public: int me; }; class D :public B,virtual public E ,public C { public: D(int d) :B(d), C(d), md(d) {} public: int md; };

    可在命令窗口下,进入相应路径,使用cl ConsoleApplication5.cpp /d1reportSingleClassLayoutD 查看类D的内存布局,结果如下:

    Processed: 0.009, SQL: 9