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
问题:具有父级的类在垃圾回收时不会被删除。
如何解决这个问题呢?谢谢。
Using luabind 0.81
Simple test to illustrate the problem:
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: Class with parent is not deleted on garbage collection.
How to solve this problem? Thank you.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
请参阅在 luabind::object 中存储带有父级的 lua 类。这是同样的问题。
B
实例保留在“超级”上值中。在调用
collectgarbage()
之前将全局super
设置为nil
应该可以解决问题:See Storing a lua class with parent in luabind::object. This is the same problem. The
B
instance is left in a "super" upvalue.Setting the global
super
tonil
before callingcollectgarbage()
should make the problem go away: