虛繼承的內存分佈

虛繼承區別於普通繼承,就是普通繼承的基類的內存在開始位置,而虛繼承的共享基類內存在最後,而虛繼承的子類,需要知道共享基類的偏移量,所以,虛繼承導致子類的大小增加一個指針大小,即多了一個vbptr(虛基類指針)。

vbptr指向一個vbtable,第一個整數表示類起始位置偏移量,第二個整數表示虛繼承的共享基類偏移量。

內存分佈上,vbptr在類的成員屬性之前,vfptr(虛函數表)之後。

如果類存在vfptr(虛函數表),那個vbtable的第一個整數就是負數,否則就是0,也就是類的內存開始就是vbptr。

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