However, if I rewrite the vfunc version to build the UI in the startup method, it segfaults during the Gtk3::ApplicationWindow->new($app) call.
Concretely, gtk_init() is called in the default handler for the GApplication::startup signal. Therefore, GtkApplication subclasses should chain up in their GApplication::startup handler before using any GTK+ API.