一段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 Bar(我不需要 userdata Foo,因为我想节省空间)——那么我需要以某种方式使用户数据 Vertex*/Quaternion* 不被 gc 编辑。
最佳答案
Is it possible for a piece of lua user data to hold reference to a lua object?
不可以。用户数据不能保存指向另一个 Lua 对象的指针。如果你想使用一个用户数据来保持另一个Lua对象的事件,你必须使用弱表来实现。罗伯托的书为 section on how to do it .
关于Lua用户数据GC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3034247/