2009-07-12 7 views
6

Ok, voici un problème que j'ai. J'ai des liaisons Lua vers un moteur de rendu qui a un gestionnaire de rendu interne qui garde sa propre trace de pointeurs pour la scène de rendu et les gère. Le problème est que quand je l'utilise de Lua, si je ne garde pas une référence Lua à chaque objet que j'ajoute au gestionnaire de rendu C++, il commence à ramasser les pointeurs et bien sûr à provoquer des plantages. Je ne veux pas particulièrement devoir enregistrer chaque référence à chaque chose que je crée. Existe-t-il un moyen de forcer Lua à ne pas ramasser des objets? Existe-t-il d'autres moyens de contourner ce problème? Je génère les liaisons Lua avec SWIG.Lua bindings à C++ et la collecte des ordures

Répondre

9

Un moyen simple pour empêcher Lua de ramasser les ordures d'un objet est de placer cet objet dans une table (appelez-le uncollectable), puis de mettre cette table dans le registre Lua.

Votre autre option consiste à utiliser un niveau d'indirection supplémentaire avec chaque objet Lua, c'est-à-dire, utiliser des "données utilisateur légères". La légère userdata pointe vers un pointeur sur l'objet C++, et même si les données utilisateur légères sont collectées, l'objet sous-jacent reste indemne.

Ces explications sont assez succinctes, mais j'espère qu'avec l'aide de Programming in Lua, vous pouvez en transformer un en code de travail.

Questions connexes