il discorso dell'ambiguità è intrinseco nell'ereditarietà multipla, e non ci puoi fare niente. E' uno degli svantaggi dei linguaggi come C++, che viene brillantemente risolto in Object-Pascal, in Modula-2 e in Java con l'utilizzo dei cosiddetti Components, che implementano delle interfacce astratte piuttosto che ereditare classi instanziabili.
Per quanto riguarda il sizeof() di una classe, intervengono 2 fattori che non puoi controllare direttamente:
1- la Virtual Table, contiene i puntatori a tutte le funzioni virtuali di quella classe, la sua dimensione è variabile
2- il Padding, sono byte vuoti che il compilatore inserisce per allineare gli indirizzi dei membri delle classi a multipli di 4 byte, in modo da velocizzare gli accessi in memoria e (in alcune architetture RISC) evitare il disallineamento dello stack con conseguente corruzione dello stesso.
|