需要帮助理解luabind如何实例化类。
2011-8-14 20:10:19
收藏:0
阅读:98
评论:1
假设我有一个像这样的类:
class A
{
public:
A(){}
~A(){}
};
并通过 Luabind 将其暴露给 Lua,如下所示:
module(luaState)
[
class_<A>("Foo")
.def(constructor<>())
];
最后按以下方式在脚本中实例化它:
A = Foo();
此时,A 的实际“存在状态”是什么?
它是否在堆中,而 Lua 是在某个地方保留对它的引用? (或 luabind::object?)
我感觉它只能是指针,就像通过 new 或等效方式进行分配一样。
然而,我可以将接受引用的函数绑定到 lua 中,例如 lua_doSomething(A &a)
,并且最终在其中得到的是一个实际的引用。
当然,我知道这很可能只是 luabind 将 a
作为 *a
传递,但我不知道它是否是这样实现的。
我之所以问这个问题,是为了更好地了解并预测在脚本中实例化的对象的生命周期。
另外,我不确定如果我不是像上面那样将类暴露到 lua 中,而是像这样做:
A *lua_CreateA()
{
return new A();
}
module(luaState)
[
class_<A>("Foo")
];
module(luaState)
[
def("createA",&lua_CreateA)
];
并像这样使用它:
A = createA();
根据我现在了解的情况,这种情况需要我进行清理,因为我是分配新对象的人,除非像使用绑定构造函数一样进行赋值。
简而言之,在对象生命周期和其他方面我确实很困惑... 我搜索了与此相关的关键词,但我只得到了像 http://www.gamedev.net/topic/525692-luabind-ownership-and-destruction/ 这样的东西。
这并不是我想知道的。 我想了解关于分配、实例化、生命周期和所有这些方面的具体处理方式。
原文链接 https://stackoverflow.com/questions/7059426
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
使用 Luabind 对象的生命周期非常简单。你不需要理解 Luabind 内部的详细情况来使用它。
Lua 直接创建的对象是由 Lua 拥有的。因此,如果你在 Lua 中使用构造函数语法分配一个对象,那么该对象就由 Lua 拥有。当该对象在 Lua 中不再被引用时,Lua 的 GC 将回收它。
如果 Lua 通过其他方式获得一个对象的引用,则除非你使用 Luabind 的 adopt 策略显式地转移所有权,否则 Lua 不拥有该对象。因此,如果你绑定一个返回对象的函数到 Lua,以便让 Lua 决定该对象何时存活或死亡,那么你需要使用 adopt 策略。
最后一段仅适用于实际引用(返回指针和引用类型)。如果 Lua 得到一个对象的 _拷贝_(通过非引用或指针返回值),那么 Lua 将拥有该对象的 _拷贝_。