2011-11-14 7 views
6

多形体へのポインタBase* base_ptrがあります。それはオブジェクトの動的なタイプのサイズを見つけることは可能ですか?多型オブジェクトのサイズを調べる

AFAIK、sizeof(*base_ptr)静的タイプのサイズはbase_ptrです。私はこれが可能ではないと思うようになっていますが、多分私は何かを見落としています。

注:サイズを返すタイプ階層に仮想関数を追加することはできますが、これは私の場合は望ましい解決策ではありません。

EDIT: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 
関連する問題