#include using namespace std; #include const char gladefile[] = "" "" " " " " " False" " " " " " button" " False" " True" " True" " True" " False" " " " " " " ""; class DerivedButton : public Gtk::Button { public: DerivedButton(BaseObjectType* cobject, const Glib::RefPtr& refBuilder) : Gtk::Button(cobject) { cout << "DerivedButton::ctor" << endl; } virtual ~DerivedButton() { cout << "DerivedButton::dtor" << endl; // <--- This line never gets executed } }; class MainWindow : public Gtk::Window { private: DerivedButton* m_pButton; public: MainWindow(BaseObjectType* cobject, const Glib::RefPtr& refBuilder) : Gtk::Window(cobject) , m_pButton(NULL) { cout << "MainWindow::ctor" << endl; refBuilder->get_widget_derived("button1",m_pButton); } virtual ~MainWindow() { cout << "MainWindow::dtor" << endl; } }; int main(int argc, char* argv[]) { Gtk::Main kit(argc,argv); Glib::RefPtr builder = Gtk::Builder::create_from_string(gladefile); MainWindow* main_win = NULL; builder->get_widget_derived("window1", main_win); if (main_win) { kit.run(*main_win); } delete main_win; return 0; }