Murray Cumming wrote: > On Thu, 2007-03-22 at 16:49 +0100, Jef Driesen wrote: >> When I look at some gtk C code, I see everywhere pointers to widgets >> (and other things). As i understand all gtk objects are reference >> counted to keep the objects alive until the last pointer is released. >> >> How does that work in gtkmm? At first sight, gtkmm widgets doesn't seem >> to be reference counted, because something like this does not work >> (because of the private copy constructor): >> >> Gtk::Button a, b(a); >> >> Do I need to use smart pointers (e.g. boost::shared_ptr) for that? Does >> that means the underlying gtk reference counting mechanism is not used >> in gtkmm? >> >> I read in the gtkmm documentation there is a Glib::RefPtr, that uses the >> internal gtk/gobject reference counting. If I understand that correctly, >> I can use this smart pointer (instead of third party implementation like >> boost)? >> >> Glib::RefPtr<Gtk::Button> a(new Gtk::Button()), b(a); >> >> But I've never seen that before, only with non-widgets objects like >> pixbufs and treemodels. > > RefPtr is not for use with widgets. Widgets (or other things that derive > from GtkObject rather than GObject) have different, more complicated > memory management than the reference-counted objects such as TreeModel. > > This page has an overview of gtkmm memory management: > http://www.gtkmm.org/docs/gtkmm-2.4/docs/tutorial/html/ch22.html > > In summary, it's just regular C++ memory management so you can do what > you like, and we have some things to help you sometimes.
Thanks for the clarification. >> One of the problems I'm trying to solve is I want to create a treeview >> that will act as a sidebar pane in my application. And I would like to >> store a reference to other widgets (which are in a notebook) in the >> treemodel. When the user activates an item in the treeview, the >> corresponding widget should be displayed in the main application pane >> (by displaying the correct notebook page). How should this treemodel >> look like in gtkmm? Is a smart pointer going to interfere with the >> automatic memory management when I add the widget to the notebook? Do I >> need smart pointers at all for all this? > > You can use some other smartpointer, such as one from boost, or you can > use some parent-child relationship of your own. What do you mean with "parent-child relationship"? _______________________________________________ gtkmm-list mailing list [email protected] http://mail.gnome.org/mailman/listinfo/gtkmm-list
