123
4567
891011
1213
1415
1617
1819
20
class
base
;class
derived
:public
base
;intmain()
對於base:a4位元組,b1位元組,3位元組對齊,共8位元組。
對於derived:d並沒有和b存在一起,而是在3位元組之外(base物件記憶體單元之後,即8位元組之後),再加上3位元組對齊,共12位元組。
這樣做是有目的的,如將基類的物件複製給派生類物件時,這樣分配記憶體不會對某個派生類物件成員造成未知的覆蓋。
將b物件拷貝到d物件。
derived d;
base b;
base *pb = &b;
base *pd = &d;
*pd = *pb;
類大小 sizeof 研究(虛繼承)
class top 基類的虛表入口,4位元組 接著看left跟right都是16位元組。本來除了top的8位元組,left裡只有int y 佔4位元組,還有4位元組佔在那裡?由於是虛繼承,虛繼承的子類都要包含乙個指向基類的指標,從而實現動態聯編。一次,要額外加4位元組的空間。所以一共是8 4 4 1...
類的sizeof(虛函式,虛繼承,空類是1)
1 空類的sizeof是1。空類是指沒有成員的類,類中的函式不佔空間,除非是虛函式。如 class a a void fun sizeof a 是1.注 class a1 a1 void fun char a 0 sizeof a1 也是1.vc6.0下編譯 2 若類中包含成員,則類物件的大小只包括...
使用sizeof計算虛繼承的類物件的空間大小
include using namespace std class a class b class c public a,public b class d virtual public a class e virtual public a,virtual public b class f int f...