zoukankan      html  css  js  c++  java
  • GHashTable不能以字符串作为key,可以使用data list来代替

    GHashTable的key和value都是gpointer,也就是说,如果想用一个string来做key的话,key的类型就只能是char *,即便如此,用string做key也是不行的。

    因为key是指针,我们没法保证两个char *的值是一样的。就算我们重载了GHashTable key的compare函数,也无法达到这一目的。

    所以,可以考虑使用data list来代替。GLib中的data list,key只能是string或者GQuark,value就是gpointer。使用data list,两个key的指针可以不同,因为在设置key的时候,data list会将字符串复制到它内部的数据结构中,这样下次取出数据的时候,就真的做的是字符串比较了,而不是简单的去比对指针。而且作为key的string,如果调用了类似g_datalist_set_data之后,这个string就可以free掉了,因为字符串已经被拷贝到data list中去了。

    gobject中的g_object_set_data使用的就是data list。 

  • 相关阅读:
    《大道至简》之五
    String类总结
    《大道至简》之沟通
    程序设计及总结
    《大道至简》之团队
    动手动脑课堂作业7---------
    动手动脑课堂作业7
    动手动脑
    大道至简—现实中的软件工程—思考还是思想
    动手动脑
  • 原文地址:https://www.cnblogs.com/super119/p/1911594.html
Copyright © 2011-2022 走看看