Re: when we can delete a class derived from Gtk::Window or others

Kjell Ahlstedt via gtkmm-list <[email protected]> Sat, 19 Feb 2022 12:42:57 +0100
Newsgroups gmane.comp.gnome.gtkmm
Message-ID <[email protected]>
Den 2022-02-18 kl. 18:55, skrev Klaus via gtkmm-list:
>
>> I tested you example and it works whenever the user closes the 
>> windows in the reverse
>> order from creation.
>
> That it seems to work is known. The question is, is it the allowed way
> to do this? If the Gtk::Window class performs more actions after hide()
> and access data for the current class, the code has undefined behavior,
> even if it works in the moment. I simply could not find any
> documentation which gives me an idea what the window class perform on
> close action.
>
Several of the example programs in the gtkmm tutorial delete a 
Gtk::Window in a "hide" signal handler. See e.g.
https://gitlab.gnome.org/GNOME/gtkmm-documentation/-/blob/gtkmm-3-24/examples/book/menus/main_menu/exampleapplication.cc

https://gitlab.gnome.org/GNOME/gtkmm-documentation/-/blob/gtkmm-3-24/examples/book/printing/advanced/printformoperation.cc

In the examples I've found, the deletion is not done by the window 
itself in an overridden default signal handler. It's done in a connected 
signal handler. I'm pretty sure it doesn't make a difference.

I would say it's safe to delete a Gtk::Window in a "hide" signal 
handler, default or connected. I ran the main_menu example with 
valgrind, both as it is on the website, and with "delete this" in an 
overridden default signal handler. valgrind did not report any illegal 
memory accesses.

Kjell