【问题标题】:Luabind class deriving problem (memory 'leak')Luabind 类派生问题(内存“泄漏”)
【发布时间】:2010-12-29 02:56:19
【问题描述】:

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

输出:
一个初始化
初始化

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

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

【问题讨论】:

    标签: scripting garbage-collection lua luabind


    【解决方案1】:

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

    在调用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')
    

    【讨论】:

    • 非常感谢。特别适用于“super = nil”的解决方案,因为我无法编译 luabind0.9rc 来测试这个修复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-28
    相关资源
    最近更新 更多