C++ 對象內存佈局

好文要記下來

http://blog.csdn.net/haoel/article/details/3081328/

http://blog.csdn.net/haoel/article/details/3081385

 

玄機逸士系列:

http://blog.csdn.net/pathuang68/article/details/4101970

 

補充一點,兩個博文裏面都沒有給出虛基類表中的第一項的解釋,其實第一項就是vbptr到自己類對象地址的偏移量。若沒有虛函數,也就是沒有vfptr,偏移量爲0,若有,就爲

-4(vfptr 在 vbptr之前,所以是-4).

 

玄機逸士的結論(VC++6):

其一,只要涉及到虛基類,一切問題就變得複雜起來;

其二,如果同時存在vfptr和vbptr,vfptr居前,vbptr居後;

其三,普通基類居前,虛基類總是儘可能地排列在layout的最後;

其四,兩個同一層次的虛基類subobject,先聲明者居前,後聲明者居後,這點和普通基類是一樣的;

其五,兩個不同層次的虛基類subobject,層次高者居前,層次低者居後;

其六,Stan Lippman建議,不要在一個virtual base class中聲明nonstatic data member,理由是這樣做會是問題變得非常複雜。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章