找出多态对象的大小
Find out the size of a polymorphic object
我有一个指向多态对象的指针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
相关文章:
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 通过switch和static_cast访问多态对象的运行时类型
- 如何查找哪个类对象位于数组的特定索引上(多态性)
- C++ 在堆栈中包含多态属性的类对象存储
- 转身多态对象
- 多态对象的数组
- C++ 多态模板类,模板类型对象的实例化
- 创建基类指针的向量并将派生类对象传递给它(多态性)
- C++多态性:有没有办法找到对象成员函数的地址?
- C++ 被此代码与多态性、指针和对象切片混淆
- 了解C++中多态对象的序列化
- 具有多态性的对象声明中的逗号
- 如何复制多态对象
- 使用多态性时在子对象之间进行转换?
- 多态性的面向对象方法
- 分配分配器为多态对象分配内存
- 将多态对象存储在unordered_set中
- 如何使用多态性将相同的操作应用于具有相同基类的不同对象的unordered_sets
- 使用数组对对象的编译时多态性是否可行?
- C++对象多态性问题