一块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;
}
[即。假设Vertex&四元数是用户数据的重要组成部分]。
现在,假设我有一个Lua用户函数,它接受用户数据Vertex和用户数据Quaternion,并创建一个userdata Bar(我不想要userdata Foo,因为我想保存空间) - 然后我需要不知何故,用户数据Vertex * / Quaternion *不能被gc-ed。
答案 0 :(得分:4)
一个lua用户数据是否可以保存对lua对象的引用?
否。用户数据无法保存指向另一个Lua对象的指针。如果要使用userdata使另一个Lua对象保持活动状态,则必须使用弱表来执行此操作。罗伯托的书作为section on how to do it。
答案 1 :(得分:0)
因为我和lua做了什么,所以已经有一段时间了。我认为如果引用的数据是由lua机器创建的,那么它将自己清理它。否则,您必须等待C代码中的gc回调并自行释放内存。