我需要对 glib 信号参数执行 g_object_unref() 吗?

Posted

技术标签:

【中文标题】我需要对 glib 信号参数执行 g_object_unref() 吗?【英文标题】:Do i need to do g_object_unref() on glib signal parameters? 【发布时间】:2015-12-10 15:21:21 【问题描述】:

当我将信号连接到回调函数时,回调函数会获取传递的参数。 reference counter 是在对象传递给我的回调函数之前增加还是我必须自己增加它。

我想这必须有某种约定,因为gtklibgobject 的文档中没有提到类似的内容。

【问题讨论】:

对象的所有者是谁?你能添加一个例子吗?我从来没有默认添加引用,这取决于... 【参考方案1】:

通常,当对象传递给回调时,您不会假定对对象的引用。仅当对象是带有“transfer full”注释的方法的返回值时,您才假定引用。您可以在文档中看到这些注释。

(我说“一般”是因为总有一些构建不良的库,其 API 违反了这些准则。不过,您对此无能为力。)

【讨论】:

以上是关于我需要对 glib 信号参数执行 g_object_unref() 吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 glib 信号回调附加到某些线程上下文

DBus Glib,发送带有嵌套结构的信号

如何使用 glib/gio 监控根目录?

为了使用 Glib::wrap,必须对 Glib::init() 进行啥操作?

Glib 对 C 函数进行单元测试

如何控制 glib 中调试信息的级别?