Uso de `g_object_set_data` para el paso de nombre de usuario
Pregunta
Estoy utilizando g_object_set_data
para establecer el nombre de usuario con event_box por lo que en la llamada hacia atrás puedo conseguirlo con puntero event_box.
g_object_set_data(G_OBJECT(event_box), "user_name", (gpointer)(user_name) );
Pero el problema es que yo soy la creación nombre_usuario que no es una cadena asignada puntero.
Es una cadena local (no asignado en la cadera), que se destruye.
Por lo que es necesario asignado y luego usar el puntero, sólo quiero a nombre de un asociado con este event_box.
Solución
Usar el código siguiente:
g_object_set_data_full (G_OBJECT (event_box),
"user_name",
g_strdup (user_name),
(GDestroyNotify) g_free);
De esta manera la cadena será duplicado en el montón y la copia será obtener liberados automáticamente cuando event_box
se destruye.
Otros consejos
Sí, ya que los datos almacenados en la GObject es sólo un puntero normal, no puede hacer la gestión de memoria para usted.
Sólo tiene que llamar g_strdup()
sobre la cuerda, y guardar el resultado.