2011-11-14 1 views
6

다형성 객체에 포인터 Base* base_ptr이 있습니다. 객체의 동적 유형의 크기를 알아낼 수 있습니까?다형성 객체의 크기 알아보기

AFAIK, sizeof(*base_ptr) 정적 유형의 크기는 base_ptr입니다. 나는 이것이 가능하지 않다고 생각하기 시작했으나, 아마도 나는 뭔가를 바라보고있다.

참고 : 제 유형의 계층 구조에 가상 함수를 추가하여 크기를 반환 할 수 있다는 것을 알고 있지만 제 경우에는 바람직한 해결책이 아닙니다.

편집 : sizeof(base_ptr) ->sizeof(*base_ptr)

+0

'(base_ptr)는'당신의 크기를 제공를 sizeof 포인터가 아니라 어떤 클래스. –

+0

심지어 g ++처럼 보입니다 - 특정 은이 정보를 제공하지 않습니다. – aschepler

답변

11

아니, 당신은 C++로 할 수 없어 - 적어도 휴대용 방법. 가장 좋은 방법은 각 클래스에 getSize() 멤버 함수를 구현하는 것입니다.

5

예. 내가 여기에 설명 된대로, 가능하면

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