我有一个简单的Lua
脚本
function TestFunction(Id)
local Factory = TestParent();
local ChildDirect = TestChild("DirectCall");
local ChildFactory1 = Factory:CreateChild("Factory1");
local ChildFactory2 = Factory:CreateChild("Factory2");
result = Ret()
return result
end
使用两个C ++公开的对象(通过luabind)
void TestParent::RegisterToLua(lua_State* lua)
{
// Export our class with LuaBind
luabind::module(lua)
[
luabind::class_<TestParent>("TestParent")
.def(luabind::constructor<>())
.def("CreateChild", &TestParent::CreateChild)
];
}
void TestChild::RegisterToLua(lua_State* lua)
{
// Export our class with LuaBind
luabind::module(lua)
[
luabind::class_<TestChild>("TestChild")
.def(luabind::constructor<std::string>())
.def("GetValue", &TestChild::GetValue)
];
}
我调用了函数
luabind::object obj = luabind::call_function< luabind::object >(LuaState, "TestFunction", IdParam);
if ( obj.is_valid() )
{
....
}
lua_gc(LuaState, LUA_GCCOLLECT, 0);
在lua_gc
来电期间,仅Factory
和ChildDirect
个对象被销毁。 ChildFactory1
和ChildFactory2
仍然分配。 lua堆栈在luabind::call_function
之后保持平衡(具有相同的值 - 5 - 一些表)。
有什么问题? Factory创建的对象仍以某种方式引用?由谁?
CreateChild正文是
TestChild* TestParent::CreateChild(std::string strname)
{
return new TestChild(strname);
}
新构造对象的所有权应由lua
对象获取,并在ChildFactory1或ChildFactory2为nil
时被销毁或超出范围。
答案 0 :(得分:1)
答案 1 :(得分:1)
adopt:用于跨语言边界转移所有权。
module(L)
[
def("create", &create, adopt(result))
];