我收到了以下与sizeof()相关的问题:
class C
{
public:
C();
virtual ~C();
unsigned char _member0 s[4];
static long _member1 d;
}
int main()
{
C vc;
cout << sizeof(vc);
}有人能解释一下在这种情况下sizeof()函数是如何计算的吗?
发布于 2012-08-30 15:07:29
确切的答案可能会因编译器而异,因此严格意义上说,您的问题的答案是实现定义的。
考虑到这是一个面试Q(看你之前的Q),你应该指出以下几点:
vptr添加到类实例中,这可能会增加大小。memory.static 发布于 2012-08-30 15:04:35
它给出了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] | -------------------- ---------------
-----------------https://stackoverflow.com/questions/12191510
复制相似问题