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

来源:互联网 发布:连锁超市软件 编辑:程序博客网 时间:2024/06/04 19:45

转自: blog.csdn.net/pingf0 或www.cnblogs.com/pingf


接上文
 这一部分简要介绍下类的析构,或者成为终结。
 
还是多说几句,也算是对前文的补充
 1.生成一个类是由父到子,析构的时候自然与之相对是由子到父。
 2.GObject的内存管理并没有采用垃圾回收的方式【JAVA就采用此方式】,而是采用了引用计数的方式。
  具体垃圾回收是怎么回事儿,本人还不清楚,所以就不提了。引用计数还了解一些,
  但也不是此处的重点【哎,又写了点废话】。主要要补充的是如果要在一个对象中包含另一个对象,
  需要在初始话时ref一下,析构的时候再将其unref.
 3.GObject的析构其实分为两步,一步是dispose【曝光】,另一步是finalize【终结】。分别用来unref和free对象。
 
 下面给出dispose和finalize的代码
static voidjc_boy_dispose (GObject *gobject){  JcBoy *self = JC_BOY (gobject);  /*    * In dispose, you are supposed to free all types referenced from this   * object which might themselves hold a reference to self. Generally,   * the most simple solution is to unref all members on which you own a    * reference.   */  /* dispose might be called multiple times, so we must guard against   * calling g_object_unref() on an invalid GObject.   *///////////////////////////////////  // if (self->priv->an_object)  //  {  //   g_object_unref (self->priv->an_object);  //   self->priv->an_object = NULL;  // }  /* Chain up to the parent class */  G_OBJECT_CLASS (jc_boy_parent_class)->dispose (gobject);}static voidjc_boy_finalize(GObject *gobject){  JcBoy *self =JC_BOY (gobject);  g_free (self->priv->hobby);  g_free (self->priv->name);  g_print("boy finalized !\n");  /* Chain up to the parent class */  G_OBJECT_CLASS (jc_boy_parent_class)->finalize (gobject);}

就这么简单【其实很麻烦吧。。。。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)
如果我们测试下,不难发现在析构时的顺序是先disposefinalize.
 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 南宁公租房住满5年后怎么办 合伙买房时如果出售意见不合怎么办 老旧小区改造下水一楼不同意怎么办 老旧小区下水改造没改怎么办 替公司租房子中介不退押金怎么办 想在昆山找合租房的该怎么办 链家二手房价钱买贵了怎么办 拿私人房产证抵押借钱不还怎么办 在借贷宝里借钱不还怎么办 出租屋的大门感应钥匙弄丢了怎么办 法院拍卖的房子房主不配合怎么办 租的房子如果房主卖了怎么办 房东把门锁换了里面的东西怎么办 房租没到期房东把门锁换了怎么办 租了三年店面房东违反了合同怎么办 学生登录教务系统的密码忘记怎么办 铜陵无牌助力车被交警查到怎么办 福州超标电动车被交警抓到怎么办 单位自管公租房承租人去世怎么办 取得房产证后贷款批不下来怎么办 租店面遇到难搞的房东怎么办 在拆违通知书上签字了该怎么办 单位没交公职金的退休后怎么办 公租房合同到期后没有续签怎么办 租房合同没到期不想租了怎么办 租的房子是人家公租房怎么办 五险合一软件口令忘记了怎么办 计生办把婚育状况登记错了怎么办? 医院发票法院要保险也要怎么办 上海社保里生育险暂停参保怎么办? 痔疮手术后大姨妈来了怎么办 微创痔疮术后第五天涨出血怎么办? 肚子胀疼大便拉不出来怎么办 得痔疮了该怎么办昆明东大治 下体痒还没去检查就来月经了怎么办 直肠造口手术后造口肠子突出怎么办 痔疮pph手术瘢痕两年了该怎么办 肛瘘挂线术后六天腹泻了怎么办 刚满月的孩子鼻子不通气怎么办 齐鲁医院挂的号晚了怎么办 手机微信安装后注册失败怎么办