1

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

输出:
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')

输出:
A 初始化
B 初始化

问题:垃圾回收时没有删除带有父类的类。

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

4

1 回答 1

3

请参阅在 luabind::object 中存储具有父级的 lua 类。这是同样的问题。该B实例保留在“超级”上值中。

在调用之前将全局设置为super应该可以解决问题:nilcollectgarbage()

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-23T00:04:53.760 回答