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")

Output:

A init

A finalize

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')

Output:

A init

B init

Problem: 带有父类的类在垃圾回收时不会被删除。

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

原文链接 https://stackoverflow.com/questions/1946465

点赞
stackoverflow用户53249
stackoverflow用户53249

参见 Storing a lua class with parent in luabind::object。 这是同样的问题。 B 实例被留在了“超级”upvalue中。

在调用 collectgarbage() 之前将全局变量 super 设置为 nil 可以解决这个问题:

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')
2009-12-23 00:04:53