使用 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
问题:垃圾回收中未删除带有父级的类。
如何解决这个问题?谢谢。
答案 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')