Разумно ли не использовать RefPtr для всех переменных Gtk :: Builder, потому что Gtk :: Application уже упоминается - PullRequest
0 голосов
/ 09 мая 2020

Я все еще изучаю gtkmm3, поэтому, пожалуйста, ответьте на мой (глупый) вопрос

Я создал образец приложения gtkmm3, основной класс начинается с:

#include "app-window-declaration.h"

// signal activate function was here

int
main (int argc, char *argv[])
{
    Glib::RefPtr<Gtk::Application> app =
        Gtk::Application::create("io.gitlab.Keyikedalube.Sample-gtkmm");
    ...
}

И реализация class app-window-Declaration наследует Gtk :: Window и использует три или более ресурсов Gtk :: Builder, все они ссылаются на Glib :: RefPtr, потому что в главе 26 документация gtkmm объясняет, что это необходимо сделать, чтобы

Gtk :: Builder должен использоваться через Glib :: RefPtr. Как и все такие классы, вам необходимо использовать метод create () для его создания. Например,

Glib::RefPtr<Gtk::Builder> builder = Gtk::Builder::create_from_file("basic.glade");

Однако (и вот мой глупый вопрос), поскольку в основной функции переменная app уже упоминается ... не будут ли переменные Builder автоматически go выходят за рамки и удаляются, когда приложение делает?

1 Ответ

0 голосов
/ 09 мая 2020

A Gtk::Builder необходимо использовать через Glib::RefPtr. Period. Конец дискуссии. Когда в документации говорится, что есть только один способ сделать что-то, тогда попытка сделать что-то другим будет неопределенным поведением.

Причина, по которой существует это ограничение, является частью черного ящика. Вам не разрешается предполагать, что это как-то связано с выходом за рамки и самоуничтожением. (При этом одна из возможных причин этого ограничения может состоять в том, что объекты не удаляют себя, когда ваша переменная выходит за пределы области видимости. Фабрика может сохранить копию указателя где-нибудь для использования в будущем.)

...