Черная магия
От: Lorenzo_LAMAS  
Дата: 02.02.04 09:52
Оценка:
VC 7.0

class Base
{
public:
    virtual void fun(){}
    int i_;
};

class Derived : virtual public Base
{
public:
    //Derived(){}
    void fun(){}
    double d_;
};


C закомментированным конструктором размер Derived 24, если убрать комментарий — 28.
Оригинально!
Of course, the code must be complete enough to compile and link.
Re: Черная магия
От: Dmi3evS Россия http://dmi3s.blogspot.com/
Дата: 04.02.04 23:57
Оценка: 24 (4)
Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>C закомментированным конструктором размер Derived 24, если убрать комментарий — 28.

L_L>Оригинально!

Несомненно.
Поставив перед структурами #pragma vtordisp(off), вы можете убедиться, что лишние 4 байта нужны только для корректной работы конструкторов и деструктора, поскольку в противном случае the virtual function may be passed an incorrect this pointer as a result of discrepancies between the displacements to the virtual bases of a class and the displacements to its derived classes.

Удачи!
Сергей Дмитриев
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.