不 RefPtr 所有 Gtk::Builder 变量是否明智,因为 Gtk::Application 已被引用

Is it wise to not RefPtr all Gtk::Builder variables because Gtk::Application is referenced already

我还在学习 gtkmm3 所以请考虑我的(愚蠢的)问题

我创建了一个示例 gtkmm3 应用程序,主要 class 开头为:

#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-声明继承 Gtk::Window 并使用三个或更多 Gtk::Builder 资源,所有资源都用 Glib::RefPtr 引用,因为在gtkmm 文档第 26 章解释说必须这样做

Gtk::Builder must be used via a Glib::RefPtr. Like all such classes, you need to use a create() method to instantiate it. For instance,

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

但是,(这是我的愚蠢问题)因为在 main 函数中变量 app 已经被引用了......当应用程序执行时,Builder 变量不会自动超出范围并删除自己?

A Gtk::Builder must be used via a Glib::RefPtr. 期间。讨论结束。当文档说只有一种方法可以做事时,尝试以另一种方式做事是未定义的行为。

之所以存在这个限制,是因为黑框的一部分。你不能假设它与超出范围和删除自己有关。 (话虽这么说,这个限制的一个可能原因 可能 是这样当你的变量超出范围时对象 而不是 删除自己。工厂可能会在某处保留指针的副本以供将来使用。)