读书人

提问:关于获取对象指针所指对象的大小

发布时间: 2013-10-17 17:26:17 作者: rapoo

提问:关于获取对象指针所指对象的大小问题
大家好,问题是这样的,基类对象指针与派生类对象指针均由派生类对象进行实例化,在用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 计算的是静态类型的大小。
[解决办法]

引用:
大家好,问题是这样的,基类对象指针与派生类对象指针均由派生类对象进行实例化,在用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;



这样是计算不出来的,对为解指针后,得到的是指针的具体类型并不一定是指针指向的类型
[解决办法]
可以利用一下多态获得动态类型的大小。


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 计算的是静态类型的大小。

++
[解决办法]
sizeof只是计算的是静态类型的大小。在编译时,直接用常数给替换了.
比如
ClassA *pClassA = &b;
cout << sizeof(*pClassA) << endl; 编译完后 sizeof(*pClassA)直接替换为16
[解决办法]
引用:
可以利用一下多态获得动态类型的大小。


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;
};


++
这种方法很好啊!

读书人网 >C++

热点推荐