Luabind clase derivada problema ( 'fuga' de memoria)
-
20-09-2019 - |
Pregunta
Uso luabind 0.81
Prueba simple para ilustrar el problema:
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")
Salida:
Un init
Una de finalización
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')
Salida:
Un init
B init
Problema: Clase con los padres no se elimina en la recolección de basura
.¿Cómo resolver este problema? Gracias.
Solución
Almacenamiento de una clase lua con los padres en luabind :: oponerse . Este es el mismo problema. La instancia B
se deja en un upvalue "super".
Configuración de la super
global para nil
antes de llamar collectgarbage()
debería hacer desaparecer el problema:
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')
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow