class A
{
public:
int a;
virtual void aaa() { a = 111; }
A()
{
a = 1;
}
~A()
{
a = 2;
}
};
class B : public A
{
public:
int b;
void aaa() { a = 222; }
virtual void bbb() { b = 333;};
B()
{
b = 3;
}
~B()
{
b = 4;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
B *b = new B;
b->aaa();
b->bbb();
unsigned int * p1 = (unsigned int *)&b;
A *a = (A *)b;
unsigned int *p2 = (unsigned int *)&a;
int x = sizeof(A); // <-- здесь брейкпоинт
x = sizeof(B);
delete b;
return 0;
}
на брейкпоинте значение p1 и p2 следующие:
— p1,4 0x0018ff1c unsigned int *
[0x0]
0x00282508 unsigned int
[0x1] 0xcccccccc unsigned int
[0x2] 0x0018ff70 unsigned int
[0x3] 0x004149ee unsigned int
— p2,4 0x0018ff04 unsigned int *
[0x0]
0x00282508 unsigned int
[0x1] 0xcccccccc unsigned int
[0x2] 0xcccccccc unsigned int
[0x3] 0x0018ff1c unsigned int
Если я все правильно понимаю, то что я выделил жирным это адреса vtable. Вопрос, почему они одинаковые? По идее должно быть две vtable одна для A другая для B и адреса соответсвенно должны быть разными.