[英]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.