2011-11-14 16 views
6

Ho un puntatore Base* base_ptr su un oggetto polimorfico. È possibile scoprire la dimensione del tipo dinamico di detto oggetto?Trova la dimensione di un oggetto polimorfico

AFAIK, sizeof(*base_ptr) yilds la dimensione del tipo statico di base_ptr. Sto iniziando a sospettare che non sia possibile, ma forse sto trascurando qualcosa.

Nota: sono consapevole del fatto che è possibile aggiungere una funzione virtuale alla gerarchia di tipi che restituisce la dimensione, ma nel mio caso non è una soluzione auspicabile.

EDIT: sizeof(base_ptr) ->sizeof(*base_ptr)

+0

'sizeof (base_ptr)' ti dà la dimensione di il puntatore, non di una classe. –

+0

Sembra che anche lo specifico non fornisca queste informazioni. – aschepler

risposta

11

No, non è possibile farlo in C++ - almeno in un modo portabile. La soluzione migliore sarebbe avere la funzione membro getSize() implementata in ogni classe.

5

Sì. È possibile implementare una funzione virtuale nella classe base, che restituisce la dimensione:

class Base 
{ 
    virtual int size() { return sizeof(Base); } 
}; 
class Derived : public Base 
{ 
    virtual int size() { return sizeof(Derived); } 
}; 

//...... 
Base* b = new Derived; 
int size = b->size(); //will call Derived::size() and return correct size 
Problemi correlati