[GLib][GStreamer] Glib 对象模型中的 instance struct 和 class struct

每一个 GType 都有两个结构体 :instance struct 和 class struct ,二者的生命周期、实例个数 和 司职都有区别。

实例个数:

class struct 是所有具备相同 GType 的 GObject 所共享的,只有一个实例,而 instance struct 是每一个 GObject 独享的,有很多实例。

生命周期:

每个 GObject 的销毁都伴随这一个 instance struct 的销毁,当且仅当所有具备相同 GType 的 GObject 都被销毁时,相应的 class struct 才会销毁。

司职:

前面说到了实例个数和生命周期,结合二者便可以揣测出二者责任的划分:

  • 通常会把和当前 GType 相关的 metadata 存入 class struct ,而把和某个实例强关联的数据放到 instance struct 中,比如 property 的赋初值;
  • parent class struct 放到 class struct 中,因为所有 GType 的 class struct 同样是独一份的;
  • 成员函数放到 class struct 中,因为对于一个 类来说,成员函数应当是一致的;
  • 成员变量(property)放到 instance struct 中,因为每个 element 实例都应该有自己的成员变量值;
  • 其他内容可以结合实力情况自行断定应该放在哪个struct,这里没有固定模式,放在哪还要结合生命周期和实例个数来判定。比如一个 GType 如果被设计成单例的,那么instance struct中可以什么都不放。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值