Да, если ссылка не является "плавающей". Подклассы GInitiallyUnowned
используют плавающие ссылки; наиболее распространенное использование - виджеты GTK.
Когда вы создаете виджет GTK с помощью функции gtk_whatever_new()
, он имеет одну ссылку, которая помечается как плавающая. Когда вы добавляете виджет в контейнер, контейнер также должен содержать ссылку на виджет. Но вместо вызова g_object_ref()
для виджета и увеличения счетчика ссылок до 2 он «сливает» плавающую ссылку объекта и превращает ее в нормальную ссылку. Можно сказать, что контейнер теперь «владеет» виджетом.
Затем, когда вы уничтожаете контейнер, он вызывает g_object_unref()
для виджета, и счетчик ссылок становится равным нулю, а виджет уничтожается. Таким образом, вы больше не несете ответственности за его уничтожение.
То есть с обычными GObject
s, которые обычно не входят в контейнеры, передача права собственности не происходит. Вы должны ссылаться на них сами, когда закончите с ними.