原創|其它|編輯:郝浩|2009-11-25 10:11:01.000|閱讀 683 次
概述:前面定義了幾個結構,我們可以把那些東西放在一個jc_boy.h文件中,下面開始介紹如何去實現這個BOY類,也就是要放在jc_boy.c中的部分。對于GObject而言,有了實例結構,有了類結構,自然要有如何初始化的函式,畢竟這是C語言嗎,沒有那么方便的事兒。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
接上文
這一部分簡要介紹下類的析構,或者成為終結。
還是多說幾句,也算是對前文的補充
1.生成一個類是由父到子,析構的時候自然與之相對是由子到父。
2.GObject的內存管理并沒有采用垃圾回收的方式【JAVA就采用此方式】,而是采用了引用計數的方式。
具體垃圾回收是怎么回事兒,本人還不清楚,所以就不提了。引用計數還了解一些,
但也不是此處的重點【哎,又寫了點廢話】。主要要補充的是如果要在一個對象中包含另一個對象,
需要在初始話時ref一下,析構的時候再將其unref.
3.GObject的析構其實分為兩步,一步是dispose【曝光】,另一步是finalize【終結】。分別用來unref和free對象。
下面給出dispose和finalize的代碼
Code
就這么簡單【其實很麻煩吧。。。。XD】,但這些還不夠,別忘了前面我們注冊類用的是簡化的G_DEFINE_TYPE,
而其實調用的是g_type_register_simple,這個函式里面里并沒有注冊次夠用的函式,
所以在初始話時還要在顯示聲明下曝光和終結用的函式。
可以在class_init中聲明
static voidjc_boy_class_init (JcBoyClass *klass){
……
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
gobject_class->dispose=jc_boy_dispose;
gobject_class->finalize=jc_boy_finalize;
……
}
為了測試,我們可以在main最后顯示的調用g_object_unref(boy)。
如果我們測試下,不難發現在析構時的順序是先dispose再finalize.
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:博客園