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. > 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. -- Murray Cumming [EMAIL PROTECTED] www.murrayc.com www.openismus.com _______________________________________________ gtkmm-list mailing list [email protected] http://mail.gnome.org/mailman/listinfo/gtkmm-list
