1. 普通元素内存大小
int a = 0;
int* p = &a;
cout << sizeof(a) << endl;
cout << sizeof(p) << endl;
2. 继承内存大小
class A {
public:
A(int a);
int a;
};
A::A(int a) : a(a) {
}
class B:public A {
public:
B(int a, int b);
int b;
};
B::B(int a,int b) : A(a),b(b) {
}
int main() {
A a(1);
B b(1, 2);
cout << sizeof(a) << endl; // 4
cout << sizeof(b) << endl; // 8
}
3. 菱形继承内存大小
class A {
public:
A(int a);
int a;
};
A::A(int a) : a(a) {
}
class B:public A {
public:
B(int a, int b);
int b;
};
B::B(int a,int b) : A(a),b(b) {
}
class C :public A {
public:
C(int a, int c);
int c;
};
C::C(int a, int c) : A(a), c(c) {
}
class D :public B, public C {
public:
D(int a, int b, int c, int d);
int d;
};
D::D(int a, int b, int c, int d) : B(a, b), C(a+10, c), d(d) {
}
A a(1);
B b(1, 2);
C c(1, 3);
D d(1, 2, 3, 4);
cout << sizeof(a) << endl;
cout << sizeof(b) << endl;
cout << sizeof(c) << endl;
cout << sizeof(d) << endl;
cout << d.A::a << " " << d.b << " " << d.c << " " << d.d << endl;
cout << d.A::a << " " << d.b << " " << d.C::a << " " << d.c << " " << d.d << endl;
cout << d.A::a << " " << d.b << " " << d.C::A::a << " " << d.c << " " << d.d << endl;
4. 虚继承内存大小
class A {
public:
A(int a);
int a;
};
A::A(int a) : a(a) {
}
class B:virtual public A {
public:
B(int a, int b);
int b;
};
B::B(int a,int b) : A(a),b(b) {
}
class C :virtual public A {
public:
C(int a, int c);
int c;
};
C::C(int a, int c) : A(a), c(c) {
}
class D :public B, public C {
public:
D(int a, int b, int c, int d);
int d;
};
D::D(int a, int b, int c, int d) : A(0), B(a, b), C(a+10, c), d(d) {
}
A a(1);
B b(1, 2);
C c(1, 3);
D d(1, 2, 3, 4);
cout << sizeof(a) << endl;
cout << sizeof(b) << endl;
cout << sizeof(c) << endl;
cout << sizeof(d) << endl;
cout << d.A::a << " " << d.b << " " << d.c << " " << d.d << endl;
cout << d.A::a << " " << d.b << " " << d.C::a << " " << d.c << " " << d.d << endl;
cout << d.A::a << " " << d.b << " " << d.C::A::a << " " << d.c << " " << d.d << endl;