提问:关于获取对象指针所指对象的大小问题
大家好,问题是这样的,基类对象指针与派生类对象指针均由派生类对象进行实例化,在用sizeof运算符计算两个指针解引用情况下的大小时,得到了不同的结果,为何二者指向相同的派生类对象,解引用后计算的大小会不相同呢,谢谢(大小分别是16、20字节)。
ClassA a;//基类对象
ClassB b;//派生类对象
ClassA *pClassA = &b;
ClassB *pClassB = &b;
cout << sizeof(*pClassA) << endl;
cout << sizeof(*pClassB) << endl;
cout << &(*pClassA) << endl;
cout << &(*pClassB) << endl;
[解决办法]
sizeof 计算的是静态类型的大小。
[解决办法]
这样是计算不出来的,对为解指针后,得到的是指针的具体类型并不一定是指针指向的类型
[解决办法]
可以利用一下多态获得动态类型的大小。
class A
{
public :
virtual size_t getSize( )
{
return sizeof( *this );
}
private :
int a = 10;
};
class B : public A
{
public :
virtual size_t getSize( ) override
{
return sizeof( *this );
}
private :
int b = 20;
};
class C : public B
{
public :
virtual size_t getSize( ) override
{
return sizeof( *this );
}
private :
int c = 30;
};
[解决办法]
++
[解决办法]
sizeof只是计算的是静态类型的大小。在编译时,直接用常数给替换了.
比如
ClassA *pClassA = &b;
cout << sizeof(*pClassA) << endl; 编译完后 sizeof(*pClassA)直接替换为16
[解决办法]
++
这种方法很好啊!