2014-03-01 62 views
0

我被修改C++的概念,但我堅持一個非常簡單的代碼類的大小與虛擬功能

#include <iostream> 
using namespace std; 

class foo { 
public: 
    //int i; 
    void virtual foobar() 
    { 
     cout << "foobar\n"; 
    } 
}; 

int main() 
{ 
    foo f; 
    cout << sizeof(f) << endl; 
    //cout << sizeof(f.i) << endl; 
    return 1; 
} 

上述代碼的輸出是8 但是,當我除去從代碼 註釋輸出爲16和4

上課的時候有沒有變現在的成員則vptr的大小爲8,但變成12

+0

我推薦閱讀http://phpcompiler.org/articles/virtualinheritance.html – hivert

+0

但是爲什麼在成員變量和沒有成員變量時類的大小有所不同? – rahulshr

回答

3

加入了可變大小後,你的工作,其中三分球排列在一個平臺上我不明白至8個字節。由於虛擬表格指針通常是對象佈局中的第一件事,它也必須對齊到8個字節。因此在int成員之後插入填充4個字節,這就是爲什麼您得到16的大小(vf表指針8個字節,4個int和4個填充字節)。

+0

感謝您的快速回復 – rahulshr