class Animal
{
public:
int a;
double d;
int f(){ return 25;}
};
Supponiamo per il codice precedente, tento di inizializzare un oggetto, dicendo new Animal()
, ciò new()
allocare anche memoria per la funzione f()
?Il nuovo() alloca memoria anche per le funzioni di una classe?
In altre parole, qual è la differenza nei termini di allocazione di memoria se avessi questa classe invece e facesse un new Animal()
?:
class Animal
{
public:
int a;
double d;
};
quindi, se la mia funzione è una funzione virtuale (la mia classe è astratta), 'new()' avrà problemi nell'allocazione dello spazio sull'heap? – Moeb
Tutta una funzione virtuale significa che la funzione viene aggiunta al vtable situato nella memoria statica. Esiste solo una copia di un vtable per classe che utilizza funzioni virtuali. –
@Ignacio Sto cercando una risposta a: http://stackoverflow.com/questions/2091426/why-cant-we-create-objects-for-an-abstract-class-in-c Penso che il problema sia qualcosa legato all'assegnazione della memoria, ma non riesco a capirlo. – Moeb