Свободный объект / виджет в GTK? - PullRequest
4 голосов
/ 19 мая 2010

В моем приложении GTK есть упаковочная коробка, и я время от времени заменяю ее совершенно новой записью (по крайней мере, сейчас, потому что я спешу).

Поскольку я заменяю его новым экземпляром, нужно ли явно освобождать из памяти содержимое старого пакета или в GTK есть какая-то сборка мусора?

Если мне нужно явно освободить объект, есть ли команда, которая будет рекурсивно обращаться ко всем объектам в этом дереве (например, удалит ли она мою кнопку в контейнере внутри моего основного пакета)? А как насчет сигналов и обработчиков, связанных с объектами?

Я использую C / GTK-2.0 (gcc v4.4.3 и GTK 2.20.0).

1 Ответ

6 голосов
/ 19 мая 2010

Объекты GObjects подсчитываются. Когда вы упаковываете виджет в контейнер, контейнер переходит во владение.

Когда вы делаете gtk_container_remove(), ссылка, удерживаемая контейнером, удаляется, что обычно приводит к уничтожению виджета.

Так что нет, вам не нужно явно уничтожать его, достаточно просто удалить его из контейнера.

В документации для API gtk_container_remove() также говорится, что может быть эффективнее просто позвонить gtk_widget_destroy() непосредственно на ребенка, поэтому, если вы уже делаете это, у вас все хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...