c++對象模型

先看如下代碼,一個二維點的類:

class Point
{
public:
	Point(float xval);
	virtual ~Point();
	float x()const;
	static int PointCount();
protected:
	virtual ostream &print(ostream &os)const;
	float _x;
	static int _point_count

};

這時如果定義一個對象,內存中的各種數據成員和成員函數將如何表現?
1.非靜態數據成員配置在每一個對象之內
2.靜態數據成員與靜態成員函數被放在所有對象之外
3.虛函數則分爲兩步來執行
  1)爲每個類生成一堆指向虛函數的指針,這些指針放在一個表格之中,這個表格稱爲virtual table( vtbl )
  2)爲每一個對象添加一個指針,指向這個表格,這個指針稱爲vptr,這個指針的設定,重置都由類的constructor、destructor、copy assignment完成
     每個class所關聯的type_info(用來支持runtime type identification 即RTII)也是在virtual table中,通常是放在第一個槽處

看下圖內存模型:


     萬事有利有弊,此模型也不例外
優點:由於非靜態的數據成員是被類的所有對象所共享,因此可以節省空間資源,存儲效率也更高。
缺點:如果程序代碼並沒有改變,但對象的非靜態數據成員(無論是增加,減少還是修改),那些程序的代碼都要重新編譯




發佈了127 篇原創文章 · 獲贊 18 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章