Your concern is justified. The Glib::ustring must be returned by
value. The _MEMBER_GET should be
_MEMBER_GET(name, name, Glib::ustring, const gchar*)
Your _MEMBER_SET macro doesn't seem to fit the generated code that
you show. I would think that
_MEMBER_SET(name, name, const Glib::ustring&, gchar*)
would generate that code. In this case a reference is OK, but it
looks like the generated code can cause a memory leak. Who owns the
duplicated string? Who deallocates it? What if gobj()->name
contains a pointer to a string when set_name() is called?
Kjell
Den 2018-02-22 kl. 20:56, skrev Pavlo
Solntsev:
Thanks for comments. My macroses:
_MEMBER_GET(name,name,const Glib::ustring&,const gchar*)
_MEMBER_SET(name,name,Glib::ustring,gchar*)
the generated code :
const Glib::ustring& DsnInfo::get_name() const
{
return Glib::convert_const_gchar_ptr_to_ustring(gobj()->name);
// This is my concern. it looks like we return ref for temp
object
}
void DsnInfo::set_name(const Glib::ustring& value)
{
gobj()->name = g_strdup((value).c_str());
}
Thanks.
_______________________________________________
gtkmm-list mailing list
gtkmm-list gnome org
https://mail.gnome.org/mailman/listinfo/gtkmm-list
|