[英]C++ - sizeof function applied to object class
我收到以下与sizeof()
有关的问题:
class C
{
public:
C();
virtual ~C();
unsigned char _member0 s[4];
static long _member1 d;
}
int main()
{
C vc;
cout << sizeof(vc);
}
有人可以解释在这种情况下如何评估sizeof()
函数吗?
确切的答案可能因编译器而异,因此从严格意义上讲,对您的问题的答案是“ 实现定义的” 。
认为这是一次采访Q( 看过您以前的Q ),您应该指出以下几点:
vptr
添加到类实例中,这可能会增加大小。 static
成员不会增加类对象的大小,因为它们不属于类的实例,而是属于该类。 它给出了vc的大小。 vc是C类。C类的每个对象都包含元数据(指向vtable的指针),因为C包含虚方法。 另外,C有一个数据字段(字符数组)。
因此,vc的大小应为指针的大小加上四个字节(加上填充,请参见下面的注释,谢谢)。
d不是C类对象的组成部分,因为它是静态的,因此不算在内。
所以我们有:
------vc--------- ----vtable for C---- ----statics----
| ptr to vtable | ----------> | pointer to ~C | | C::d |
|---------------| | ... | | ... |
| char [4] | -------------------- ---------------
-----------------
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.