使用C++,LUA 5.1,luabind 0.7-0.81在luabind存储一个LUA类与父::对象
试图创建一个父类LUA并将其存储在一个luabind ::目的。
的Lua
class 'TestClassParent'
function TestClassParent:__init()
print('parent init\n')
end
function TestClassParent:__finalize()
print('parent finalize\n')
end
class 'TestClass' (TestClassParent)
function TestClass:__init()
print('init\n')
TestClassParent.__init(self)
end
function TestClass:__finalize()
print('finalize\n')
end
C++
{
luabind::object obj = luabind::call_function<luabind::object>(lua_state, "TestClass");
}
printf("before GC\n");
lua_gc(lua, LUA_GCCOLLECT, 0);
printf("after GC\n");
输出:
初始化
父初始化GC
之前
GC
结果:在obj被销毁后,TestClass实例在垃圾回收循环后仍然存在(__finalize方法未被调用且内存未被释放)。它只在程序退出时销毁。
Moresome如果我使用没有父类的类,垃圾收集是正确的。
如果我尝试使用采取政策(取创建的对象的所有权)
luabind::object obj = luabind::call_function<luabind::object>(lua_state, "TestClass")[luabind::adopt(luabind::result)];
我得到:
- 在luabind 0.7 - 相同的结果,而不会采取政策
- in luabind 0.81 - 崩溃消息“您正试图使用unregistrerd类型”
我该如何正确创建C++一个Lua对象和把它的所有权?
这是关于这里描述的问题 - http://stackoverflow.com/questions/1946465/luabind-class-deriving-problem-memory-leak? – kFk 2009-12-22 15:19:57
是的,这是相同的错误。 – 2009-12-22 23:59:42