Free of array-typed value when use G_DEFINE_TYPE_WITH_CODE
Please help to check it.
G_DEFINE_TYPE_WITH_CODE(WANConnectionDbDelegate, xx, xx, xx)
g_intern_static_string ("WANConnectionDbDelegate")
g_intern_static_string (const gchar *string)
quark_intern_string_locked (string, FALSE);
quark_from_string (string, duplicate);
quark_new (duplicate ? quark_strdup (string) : (gchar *)string); // duplicate==FALSE, no malloc
g_hash_table_insert (quark_ht, string, GUINT_TO_POINTER (quark));
g_hash_table_insert_internal (hash_table, key, value, FALSE); //keep_new_key==FALSE,不保留
g_hash_table_insert_node (hash_table, node_index, key_hash, key, value, keep_new_key, FALSE); //reusing_key==FALSE, del key
in g_hash_table_insert_node:
if (keep_new_key)
{
key_to_free = hash_table->keys[node_index];
hash_table->keys[node_index] = new_key;
}
else //keep_new_key==FALSE
key_to_free = new_key;
then:
if (hash_table->key_destroy_func && !reusing_key) // reusing_key==FALSE
(* hash_table->key_destroy_func) (key_to_free); // key_to_free == "WANConnectionDbDelegate"
Edited by Daneel Olivaw