找出多态对象的大小

时间:2011-11-14 14:07:36

标签: c++ polymorphism sizeof

我有一个多态对象的指针Base* base_ptr。是否有可能找出所述对象的动态类型的大小?

AFAIK,sizeof(*base_ptr)的大小与base_ptr的静态类型相同。我开始怀疑这是不可能的,但也许我忽视了一些事情。

注意:我知道我可以在我的类型层次结构中添加一个虚函数来返回大小,但在我的情况下这不是一个理想的解决方案。

编辑:sizeof(base_ptr) - > sizeof(*base_ptr)

3 个答案:

答案 0 :(得分:12)

不,你不能用C ++做到这一点 - 至少以便携方式。最好的办法是在每个班级中实施getSize()成员函数。

答案 1 :(得分:6)

是。您可以在基类中实现一个返回大小的虚函数:

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

答案 2 :(得分:2)

如果可能,您可以使用CRTP idiom,如我在此处所述:https://stackoverflow.com/a/14730166/908336