C++虛繼承
首先看一段代碼:
class B { public : int b; }; class D: virtual public B { public : int d; }; int _tmain(int argc, _TCHAR* argv[]) { cout<<sizeof(D)<<endl; };
在vs輸出12,當將virtual關鍵字去掉之後,輸出8;可見虛擬繼承需要額外的空間開銷。在vs中,引入了所謂的“虛基類表”(類似虛函數表),同時每個Class Object中有一個指向虛基類表的指針,虛基類表中存放著對應虛基類對象的指針(地址)。
那麼兩個虛基類的情況如何呢?我們修改代碼如下:
class B { public : int b; }; class B1 { public : int b1; }; class D: virtual public B,virtual public B1 { public : int d; };
結果輸出為16,隻是增加了新的基類的數據成員(int),並沒有增加更多的額外空間,所以進一步說明“虛基類表”的存在,因為所有的虛基類指針都在虛基類表中。
最後更新:2017-04-03 12:56:00