C++中類的內存分配簡單總結

類的內存分配簡單總結函數

代碼片斷以下:this

class ClassAspa

{指針

private:對象

int A;繼承

int B;內存

    void prin1()作用域

{編譯器

}編譯

void prin2()

{

}

virtual void prin3()

{

}

};

class ClassB:public ClassA

{

public:

int C;

int D;

void prin4()

{

}

void prin5()

{

}

virtual  void  prin6()

{

}

};

int _tmain(int argc_TCHARargv[])

{

cout<<sizeof(ClassA)<<endl;

cout<<sizeof(ClassB)<<endl;

return 0;

}

結果是12

       20


結果爲何是這樣?

32位系統int4個字節,而一個類中全部的虛函數經過一個虛函數指針管理,類對象的大小隻包含這個vptr指針,其餘虛函數是放在別的內存空間中管理,vptr指針也是4個字節大小。注意到普通成員函數並不佔類對象的大小空間,由於普通成員函數經過this指針管理,一個對象的this指針並非對象自己的一部分,不會影響sizeof(對象)的結果。this做用域是在類內部,當在類的非靜態成員函數中訪問類的非靜態成員的時候,編譯器會自動將對象自己的地址做爲一個隱含參數傳遞給函數。這個this指針會因編譯器不一樣而有不一樣的放置位置多是棧,也多是寄存器,甚至全局變量。子類其實無論如何繼承,用sizeof()算該類的大小都會把父類中的私有成員變量所佔的空間算進去,也就是說,私有變量也在子類中分配了類存,但你卻不能夠直接訪問,這起到一個保護做用,我感受這如同一個珠寶,共有繼承就是開放性的展覽,而私有繼承是把珠寶鎖起來,你卻不能動,要動珠寶若是有管家(基類的public中定義了一些對其私有變量操做的成員函數,)只能讓管家幫你代勞。因此基類就得出了12子類就得出了20

相關文章
相關標籤/搜索