perché la dimensione della classe rimane la stessa aggiungendo più di una funzione virtuale?
La dimensione della classe è di soli 8 byte, che è la dimensione del puntatore vitale? e per quanto riguarda la dimensione di vtable che è nella classe?
#include <iostream>
using namespace std;
class Base
{ public:
virtual void f1(){}
virtual void f2(){}
};
class Derive: public Base
{
void f1(){}
void f2(){}
};
int main()
{
cout<<sizeof(Base)<<endl;
}
Risposte
Probabilmente scoprirai che se la tua implementazione utilizza v-table per implementare funzioni virtuali, la classe stessa memorizza un puntatore alla v-table.
La dimensione del puntatore non dipenderà dal numero di funzioni nella v-table a cui punta.
Come estensione alla risposta di Bathshebas (è la maggior parte della risposta), vorrei sottolineare che ciò che ottieni sizeof(class)
è la dimensione di ciò che deve essere memorizzato per istanza della classe, cioè per ogni oggetto effettivamente creato.
Tutto ciò che deve essere memorizzato solo una volta (per tutta la classe) non aumenterà le dimensioni.
(E vedi la risposta di Bathshebas riguardo al motivo per cui i metodi potrebbero farne parte.)