Binding Lua绑定:表与用户数据 当为C++类制作Lua绑定时,我应该返回表或USER数据对象吗?< /P>

Binding Lua绑定:表与用户数据 当为C++类制作Lua绑定时,我应该返回表或USER数据对象吗?< /P>,binding,lua,lua-table,lua-userdata,Binding,Lua,Lua Table,Lua Userdata,有人知道每种方法的优缺点吗?我建议返回用户数据。无论采用何种方法,都必须有地方放置指针 到C++数据,或者实际C++数据本身,而且没有地方 用桌子做这件事是安全的 返回表在某些情况下是有意义的,因为它们可以 在Lua中被“注释”,并带有额外的属性,而不必做任何事情 任何额外的支持。不幸的是C++对象指针 必须去某个地方,而且没有任何明智的地方让它去其他地方 而不是表本身中的实际条目 这不是一个非常安全的地方。它可以被Lua找到 代码,并删除或替换。这可能是偶然的,也可能是偶然的 目的,其实并不重

有人知道每种方法的优缺点吗?

我建议返回用户数据。无论采用何种方法,都必须有地方放置指针 到C++数据,或者实际C++数据本身,而且没有地方 用桌子做这件事是安全的

返回表在某些情况下是有意义的,因为它们可以 在Lua中被“注释”,并带有额外的属性,而不必做任何事情 任何额外的支持。不幸的是C++对象指针 必须去某个地方,而且没有任何明智的地方让它去其他地方 而不是表本身中的实际条目

这不是一个非常安全的地方。它可以被Lua找到 代码,并删除或替换。这可能是偶然的,也可能是偶然的 目的,其实并不重要

因此,我的首选是返回userdata对象。他们可能是 如果一个人真的必须坚持的话,那它就像桌子一样工作,但是 在C++中也有一个“秘密”区域(实际的用户数据本身) 可以存储对象指针,避免被Lua代码覆盖

(Userdata对象还有一个“环境”指针,这是另一个 用于存储特定于对象的数据的位置。与userdata有效负载一样 就其本身而言,Lua代码无法访问此值,并且无法对其进行损坏
除此之外,userdatas可以绑定一个uu gc元方法,这样当它们不再被引用时,您就可以让Lua负责收集它们。