Проблема получения класса Luabind (утечка памяти) - PullRequest
1 голос
/ 22 декабря 2009

Использование 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")

Выход:
Init
Финализация

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

Проблема: Класс с родителем не удаляется при сборке мусора.

Как решить эту проблему? Спасибо.

1 Ответ

3 голосов
/ 23 декабря 2009

См. Хранение класса lua с родителем в luabind :: object . Это та же проблема. Экземпляр B оставлен в "супер" значении.

Установка глобального 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')
...