【发布时间】:2011-10-26 22:18:00
【问题描述】:
假设我有这样的课程:
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),最终会有一个实际的引用。
当然,我知道这很可能只是将 a 传递为 *a 的 luabind,但我不知道是不是这样。
我问这个的原因是为了更好地理解和预测在脚本中实例化的对象的生命周期。
那,我不确定所有权或生命周期是否会改变,而不是像上面那样将类暴露给 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-ownership-and-destruction/
这不是我真正想知道的。 我想了解在分配、实例化、生命周期等方面如何在幕后处理事情的具体方式。
【问题讨论】:
标签: c++ lua allocation object-lifetime luabind