深入探索c 物件模型 類物件所需記憶體大小討論

2021-06-20 18:40:14 字數 1249 閱讀 1196

class oo	//object-oriented

virtual int fun_oo(){};

virtual int fun_oo_cpy(){};

int a;

int b;

int c;

static int temp;

};int main()

g++編譯後顯示大小為16,有兩點需要說明:

1、static的資料並儲存在類物件裡面;

2、由於裡面有虛函式,所以需要乙個vptr,只想class裡面的virtual table

接著討論在繼承情況下的大小,修改**為:

#includeusing namespace std;

class o;}

class oo:public o //object-oriented

virtual int fun_oo(){};

virtual int fun_oo_cpy(){};

int a;

int b;

int c;

static int temp;

};int main()

g++編譯後顯示大小為20,這說明在這種繼承體系下,對於物件test只有乙個vptr被維護;

接下來討論虛擬繼承下的物件大小,修改**為:

#includeusing namespace std;

class o;}

class oo:public virtual o //object-oriented

virtual int fun_oo(){};

virtual int fun_oo_cpy(){};

int a;

int b;

int c;

static int temp;

};int main()

g++編譯後顯示大小為24,這說明在這種繼承體系下,對於物件test不僅有有乙個vptr被維護,只想oo的virtual table;還有乙個vptr指向virtual base class的virual table。

《深度**c++物件模型》中有一句話「每乙個base class constructor設定其物件的vptr,使它指向相關的virtual table 之後,構造中的物件可以嚴格而正確的程式設計構造過程中所幻化出來的每乙個class的物件」,可以很好的解釋這個現象。

深入探索C 物件模型

深入探索c 物件模型 本書目錄結構如下 第1章 關於物件 object lessons 加上封裝後的布局成本 layout costs for adding encapsulation 1.1 c 模式模式 the c object model 簡單物件模型 a object model 驅動物件模...

深入探索C 物件模型之物件

物件 一 在c語言中,資料 和 對資料的處理 函式 分開宣告的,也就是說,語言本身並沒有支援 資料和函式 之間的關聯性。例如,typedef struct point3dpoint3d 而在c 中,座標型別和座標數目都可以引數化 template class point type operator ...

深入探索C 物件模型(6)

物件陣列的構造 物件資料的構造一般有兩種方式 靜態和動態 1 靜態分配 以string類為例,string a 10 就是以靜態形式構造資料,這樣的陣列的個數是確定的不能修改的。像這樣的陣列怎麼進行構造和析構呢?編譯器在構造陣列的時候會生成乙個使用預設建構函式的陣列建構函式arr new char ...