leg*_*s2k 5 c memory gobject glib
我正在使用libnotify在我的应用程序中显示桌面通知; notify_notification_new() 返回a NotifyNotification*,应作为第一个参数传递给通知库的进一步函数调用.
没有notify_notification_free()哪个可以释放它返回的指针.我查找源代码notify_notification_new()并在内部执行a g_object_new(),获取GObject*并将其作为a返回NotfiyNotification*,因此当我的应用程序执行清理时,是否应该调用g_object_unref()返回的指针notify_notification_new()?
pto*_*ato 11
是的,除非引用是"浮动".GInitiallyUnowned使用浮动引用的子类; 最常见的用途是GTK小部件.
使用gtk_whatever_new()函数创建GTK小部件时,它有一个标记为浮动的引用.将小部件添加到容器时,容器还必须包含对小部件的引用.但是它没有调用g_object_ref()窗口小部件并将引用计数增加到2,而是"沉没"对象的浮动引用并将其转换为普通引用.你可以说容器现在"拥有"小部件.
然后,当您销毁容器时,它会调用g_object_unref()窗口小部件,引用计数变为零,并且窗口小部件将被销毁.那样你就不再负责自己摧毁它了.
因此GObject,对于通常不进入容器的正常s,没有所有权转移.当你完成它们时,你必须自己不引用它们.