2011-11-14 18 views
6

Mam wskaźnik Base* base_ptr do obiektu polimorficznego. Czy możliwe jest ustalenie wielkości dynamicznego obiektu?Dowiedz się, rozmiar obiektu polimorficznego

AFAIK, sizeof(*base_ptr) yilds rozmiar statycznego typu base_ptr. Zaczynam podejrzewać, że to niemożliwe, ale może coś przeoczyłem.

Uwaga: jestem świadomy, że mogę dodać funkcję wirtualną do mojej hierarchii typów, która zwraca rozmiar, ale nie jest to pożądane rozwiązanie w moim przypadku.

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

+0

'sizeof (base_ptr)' daje wielkość wskaźnik, nie z żadnej klasy. –

+0

Wygląda na to, że nawet g ++ - specyficzne nie dostarcza tych informacji. – aschepler

Odpowiedz

11

Nie, nie można tego zrobić w C++ - przynajmniej w przenośny sposób. Najlepszym rozwiązaniem byłoby wprowadzenie funkcji członkowskiej getSize() w każdej klasie.

5

Tak. Można zaimplementować funkcję wirtualną w klasie bazowej, która zwraca rozmiar:

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 
Powiązane problemy