使用C语言进行面向对象的开发--GObject入门[5]

原创|其它|编辑:郝浩|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 void
jc_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)
如果我们测试下,不难发现在析构时的顺序是先disposefinalize.

标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:博客园

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP