假设我有这样的课程:
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();
根据我目前理解的逻辑,这种情况需要我进行清理,因为我是分配新对象的人,除非像这样的 luabind 分配与使用绑定的构造函数相同。
简而言之,我真的很困惑对象的生命周期和这里的东西......我搜索了与此相关的关键字,但我只得到像 http://www.gamedev.net/topic/525692-luabind这样的东西-所有权和销毁/
这不是我真正想知道的。我想了解在分配、实例化、生命周期等方面如何在幕后处理事情的具体方式。