【问题标题】:Should we always use g_object_ref_sink instead of g_object_ref?我们是否应该总是使用 g_object_ref_sink 而不是 g_object_ref?
【发布时间】:2021-05-22 05:54:49
【问题描述】:

GLib 中有两个函数用于 GObject 对象的引用计数:

  • g_object_ref 增加对象的引用计数,不处理浮动引用。
  • g_object_ref_sink 增加对象的引用计数,或者如果引用是浮动的,则从对象中删除 floating 标志。

既然我们不知道对象是否浮动,我们应该总是使用g_object_ref_sink,不是吗?如果我错了,我们什么时候应该使用g_object_ref,什么时候应该使用g_object_ref_sink?我们应该只对GInitiallyUnowned 对象使用g_object_ref_sink 吗?

【问题讨论】:

    标签: glib gobject


    【解决方案1】:

    您通常应该知道您正在处理的对象的类型(即指针通常具有比GObject* 更具体的类型),因此您会知道它是否可能是浮动的。使用浮动引用的基于 GObject 的 API 被记录为使用它们。没有记录为使用浮动引用的任何内容都不会。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-27
      • 2016-02-18
      • 2011-05-04
      • 1970-01-01
      • 1970-01-01
      • 2019-01-04
      • 1970-01-01
      相关资源
      最近更新 更多