Luabind类导出问题(内存'泄漏')

时间:2009-12-22 13:46:29

标签: scripting garbage-collection lua luabind

使用 luabind 0.81

简单测试来说明问题:

1)

class 'A'
function A:__init()
   print('A init\n')
end
function A:__finalize()
   print('A finalize\n')
end

do
   local obj = A()
end
collectgarbage("collect")

输出:
初始
最终确定

2)

class 'A'
function A:__init()
   print('A init\n')
end
function A:__finalize()
   print('A finalize\n')
end

class 'B' (A)
function B:__init()
   A.__init(self)
   print('B init\n')
end
function B:__finalize()
   print('B finalize\n')
end

do
   local obj = B()
end
collectgarbage('collect')

输出:
初始
B init

问题:垃圾回收中未删除带有父级的类。

如何解决这个问题?谢谢。

1 个答案:

答案 0 :(得分:3)

Storing a lua class with parent in luabind::object。这是同样的问题。 B实例保留为“超级”upvalue。

在调用super之前将全局nil设置为collectgarbage()会导致问题消失:

class 'A'
function A:__init()
   print('A init\n')
end
function A:__finalize()
   print('A finalize\n')
end

class 'B' (A)
function B:__init()
   A.__init(self)
   print('B init\n')
end
function B:__finalize()
   print('B finalize\n')
end

do
   local obj = B()
   super = nil
end
collectgarbage('collect')