MItaly io invoco te!
Questa volta cercherò di essere il più sintetica possibile:
Se ho una classe che contiene solo membri dati (credo si possano chiamare anche proprietà?) l'operatore sizeof su un'istanza di questa classe mi restituirà una quantità di memoria grande quanto la somma dei singoli membri: ad esempio per una classe che contiene tre char (1 byte), un oggetto di tale classe occuperà 3 byte.
Se ho una classe che contiene solo metodi virtuali, a prescindere da quanti siano e di che qualità siano questi metodi, un oggetto di tale classe occuperà un'area di memoria della grandezza necessaria a memorizzare un indirizzo (nel mio computer 8 byte), che è l'indirizzo dove risiede la virtual table.
Ora, ho una classe che contiene sia metodi virtuali che membri di tipo char.
Andando a logica un'istanza di questa classe dovrebbe richiedere l'allocazione di un'area di memoria di 1*n char + 8 byte.
Invece succede che, a prescindere dal numero di char, viene allocata un'area di memoria più grande.
Ad esempio se la mia classe ha da uno ad un massimo di otto char, viene allocata una memoria di 16 byte.
Ok per gli otto char (8 byte dei char + 8 byte del vptr = 16), ma perché ne alloca 16 anche se la classe ha un solo char, invece di allocare 9 byte?
E perché se il numero di char è tale da non rientrare in quei 16 byte, ad esempio se i char sono nove, ne vengono allocati 24 di byte e non 17?
Spero di essere stata abbastanza chiara, grazie a chiunque vorrà rispondermi