使用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