Den 2015-11-18 kl. 13:39, skrev John
Emmas:
That's not right. The expected order of creation of a Gtk::Window is sigc::trackable (only pointer member data) Glib::ObjectBase (pointer and bool member data) Glib::Object (no member data) Gtk::Object (only bool member data) Glib::Interface (no member data) Gtk::Buildable (no member data) Glib::Interface (no member data) Atk::Implementor (no member data) Gtk::Widget (no member data) Gtk::Container (no member data) Gtk::Bin (no member data) Gtk::Window's member data (Glib::RefPtr<Gtk::AccelGroup> accel_group_) Gtk::Window Destruction is expected to be done in the opposite order: ~Window ~RefPtr<AccelGroup> ~Bin ~Container ~Widget ~Implementor and so on That's what I get with gcc. And the crash / hang always happens while destroying Implementor. I did notice this comment at line 53 of 'glibmm/glib/glibmm/interface.cc':-No, it's no problem. Atk::Implementor is not an instantiable class. Gtk::Widget is an instantiable class. It inherits from Gtk::Object, Gtk::Buildable and Atk::Implementor. I tested your program that consists of Atk::Implementor* imp = new Atk::Implementor (NULL); delete imp; // <-- hangs here !! It did not hang or crash. Like you suspect, it's not valid code. Atk::Implementor is an interface. It shall not be instantiated except as a base class of an object. Still it's interesting that it hangs with MSVC, but not with gcc. Can you see what's happening when it hangs? Is it an infinite loop? Does it wait for some signal from somewhere? Is it a problem with the communication with the atkmm dll (assuming that atkmm is in a separate dll)? Kjell |