2009-07-12 15 views
6

Ok, aquí hay un problema que estoy teniendo.Enlaces Lua a C++ y recolección de basura

Tengo enlaces Lua a un motor de renderizado que tiene un administrador de render interno que mantiene su propia pista de punteros para la escena de renderizado y los gestiona. El problema es que cuando lo uso de Lua, si no guardo una referencia de Lua para cada objeto que agrego al administrador de render C++, comienza a juntar los punteros y, por supuesto, hace que las cosas se cuelguen. En particular, no quiero tener que guardar cada referencia a cada cosa que creo. ¿Hay alguna manera de obligar a Lua a que no recoja basura? ¿Hay alguna otra forma en que pueda solucionar este problema?

Estoy generando las vinculaciones de Lua con SWIG.

Respuesta

9

Una manera simple de evitar que Lua recoja un objeto es colocarlo en una tabla (llámalo uncollectable) y luego poner esa tabla en el registro Lua.

Su otra opción es utilizar un nivel extra de indirección con cada objeto Lua, es decir, usar "userdata light". Los datos de usuario de la luz apuntan a un puntero al objeto de C++, e incluso si se recopilan los datos de usuario de la luz, el objeto subyacente permanece indemne.

Estas explicaciones son bastante escuetas, pero espero que con la ayuda de Programming in Lua, puede convertir una en código de trabajo.

Cuestiones relacionadas