2011-11-14 24 views
6

Tengo un puntero Base* base_ptr en un objeto polimórfico. ¿Es posible averiguar el tamaño del tipo dinámico de dicho objeto?Averigüe el tamaño de un objeto polimórfico

AFAIK, sizeof(*base_ptr) yilds el tamaño del tipo estático de base_ptr. Estoy empezando a sospechar que esto no es posible, pero tal vez estoy pasando por alto algo.

Nota: Soy consciente de que podría agregar una función virtual a mi jerarquía de tipos que devuelve el tamaño, pero esta no es una solución deseable en mi caso.

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

+0

'sizeof (base_ptr)' le da el tamaño de el puntero, no de ninguna clase. –

+0

Parece que incluso el número específico de g ++ no proporciona esta información. – aschepler

Respuesta

11

No, usted no puede hacer eso en C++ - al menos de una manera portátil. La mejor opción sería tener la función de miembro getSize() implementada en cada clase.

5

Sí. Se puede implementar una función virtual en la clase base que devuelve el tamaño:

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 
Cuestiones relacionadas