msvc++ 2005 устройство vtable и vptr
От: Аноним  
Дата: 03.04.13 15:55
Оценка:
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 и адреса соответсвенно должны быть разными.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.