the base class and derived class start addresses are different under virtual single inheritance.
vc++2005 #include <stdio.h> class Base {}; Class Derived:public Base {}; Class Virtualderived:virtual public Base {}; int main () {base* PB = NULL; derived* PD = new Derived; PB = PD; printf ("sizeof (base) =%u/n", sizeof (base)); printf ("sizeof (Derived) =%u/n", sizeof (Derived)); printf ("PD is 0x%p./n", PD); printf ("PB is 0x%p./n", Pb); Delete PD; PD = NULL; PB = NULL; printf ("n"); virtualderived* PVD = new virtualderived; PB = PVD; printf ("sizeof (base) =%u/n", sizeof (base)); printf ("sizeof (virtualderived) =%u/n", sizeof (virtualderived)); printf ("PVD is 0x%p./n", PVD); printf ("PB is 0x%p./n", Pb); Delete PVD; PVD = NULL; return 0; //end of main//console output sizeof (Base) = 1 sizeof (Derived) = 1 PD is 0X003B5EF0. PB is 0X003B5EF0. sizeof (Base) = 1 sizeof (virtualderived) = 4 PVD is 0X003B5EF0. PB is 0X003B5EF4.