GTypeInfo

typedef struct {
/* interface types, classed types, instantiated types */
guint16 class_size;

GBaseInitFunc base_init;
GBaseFinalizeFunc base_finalize;

/* interface types, classed types, instantiated types */
GClassInitFunc class_init;
GClassFinalizeFunc class_finalize;
gconstpointer class_data;

/* instantiated types */
guint16 instance_size;
guint16 n_preallocs;
GInstanceInitFunc instance_init;

/* value handling */
const GTypeValueTable *value_table;
} GTypeInfo;

*******************************************************************************************************************
GClassInitFunc class_init;
如果要把一個類實例化,這個參數就不能爲NULL

************************************************
假設
類部分的結構體爲:CatClass
對象部分的結構體爲: Cat
用g_object_new做出兩個對象實列來:cat_object1 和 cat_object2。
那麼class_init函數只會掉一次,而instance_init函數會掉2次。

而get_type函數則要調用很多次:
g_type_init 後,我們調用g_object_new。
g_object_new安次序
1。會去調animal_cat_get_type
2。class_init
class_init 會調animal_cat_get_type
3。instance_init
instance_init會調animal_cat_get_type

當到第二個cat_object2時,由於不會調class_init, 故少調一次animal_cat_get_type。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章