代码之家  ›  专栏  ›  技术社区  ›  anon

用户数据管理系统

  •  2
  • anon  · 技术社区  · 16 年前

    一块Lua用户数据是否可以保存对Lua对象的引用?(就像一张表,或者另一块用户数据?)基本上,我想知道的是:

    我可以用这样的方式创建一个用户数据吗?当GC运行时,用户数据可以说:“嘿!我拿着这些其他物体的参考资料,也把它们标出来。”

    编辑:回复LHF:

    假设我有:

    struct Vertex {
      double x, y, z;
    }
    
    struct Quaternion {
      double w, x, y, z;
    }
    

    现在,我可以做到:

    struct Foo {
      Vertex v;
      Quaternion q;
    }
    

    但是假设我想要:

    struct Bar {
      Vertex *v;
      Quaternion *q;
    }
    

    [也就是说,假设顶点和四元数都是非常大的用户数据]。

    现在,假设我有一个lua用户函数,它接受一个userdata顶点和一个userdata四元数,并创建一个userdata栏(我不想使用userdata foo,因为我想节省空间),然后我需要以某种方式让userdata顶点*/quaternion*不是gc-ed。

    2 回复  |  直到 12 年前
        1
  •  4
  •   Norman Ramsey    16 年前

    一段Lua用户数据是否可以保存对Lua对象的引用?

    不。 用户数据不能保存指向另一个Lua对象的指针。如果要使用一个用户数据来保持另一个Lua对象的活动状态,则必须使用 弱表 . 罗伯托的书 section on how to do it .

        2
  •  0
  •   Anthony Atmaram    16 年前

    有段时间没和卢亚做过什么了。我认为,如果引用的数据是由Lua机器创建的,那么它将自行清理。否则,您必须在C代码中等待GC回调,然后自己释放内存。