找出多态对象的大小

Find out the size of a polymorphic object

本文关键字:对象 多态      更新时间:2023-10-16

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

AFAIK, sizeof(*base_ptr)产生静态类型的base_ptr的大小。我开始怀疑这是不可能的,但也许我忽略了什么。

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

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

不,你不能在c++中做到这一点——至少不能以可移植的方式做到。最好的办法是在每个类中实现getSize()成员函数。

是。你可以在基类中实现一个虚函数,它返回size:

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

如果可能的话,可以使用CRTP习惯用法,如下所述:https://stackoverflow.com/a/14730166/908336