El 19/11/10 14:36, David Nečas escribió:
If you want to nullify a pointer when you release your reference (which I also find often useful as once you released your reference you may not be longer sure the object exists at all) you should use a macro for that, I use one defined approximately do { if (obj) { g_object_unref(obj); (obj) = NULL; } } while (0) which, beside nullifying the pointer, is idempotent and can also be freely used on NULL pointer.
I use a generic solution which handles this case for strings, gobjects, g(s)list (not deep free), etc...
#define gel_free_and_invalidate(obj,value,func) \ do { \ if (obj != value) \ { \ func(obj); \ obj = value; \ } \ } while(0) #define gel_free_and_invalidate_with_args(obj,value,func,...) \ do { \ if (obj != value) \ { \ func(obj, __VA_ARGS__); \ obj = value; \ } \ } while(0) In the case of unref and nullify a GObject you can use this: gel_free_and_invalidate(o, NULL, g_object_unref); for strings: gel_free_and_invalidate(str, NULL, g_free); g_source ids: gel_free_and_invalidate(id, 0, g_source_remove); etc.. _______________________________________________ gtk-app-devel-list mailing list gtk-app-devel-list@gnome.org http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list