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.

¿Fue útil?

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
scroll top