好文要記下來
上
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,理由是這樣做會是問題變得非常複雜。