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
6
A
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
- 1. L'utilisation et la collecte des ordures
- 2. Tutoriel sur la collecte des ordures objective-c
- 3. Collecte des ordures ménagères pour ValueType enrubanneuse
- 4. Collecte des ordures dans le rendement Méthodes
- 5. Collecte des ordures ménagères Core Foundation objets
- 6. NSWorkspace NotificationCenter pas l'envoi de notifications en collecte des ordures
- 7. phase de Mark sur une mauvaise détection collecte des ordures C
- 8. Lua et C-struct
- 9. Comment créer une table Lua en C++ et la passer à une fonction Lua?
- 10. Référence à la fonction Lua en C/C++
- 11. Passer des variables entre C++ et Lua via Swig
- 12. C# héritant de collecte et de sérialisation
- 13. Comment puis-je partager des données entre C++ et Lua?
- 14. Les gestionnaires d'événements arrêtent-ils la collecte des ordures si le manipulateur est dans un ensemble séparé?
- 15. C# - CheatSheet pour la collecte et les génériques
- 16. Quand ramasser les ordures
- 17. jgoodies bindings + changements indirects
- 18. Htmlnode collecte et analyse
- 19. Cocoa-Bindings: Mettre à jour NSObjectController manuellement?
- 20. itération à travers une table Lua à partir de C++?
- 21. flex3 menubar: bindings dans la propriété "enabled"
- 22. Création et collecte de structures C++ dans une boucle
- 23. comment obtenir la fermeture à lua?
- 24. jgoodies bindings + coalescing changements fréquents
- 25. Exposition d'objets C# à l'écriture de scripts Lua
- 26. Comment passer une liste d'objets de C++ à Lua?
- 27. Comment charger et exécuter un fichier lua à partir d'un autre fichier lua
- 28. Demande le type Lua userdata à partir de C
- 29. Qu'est-ce qui empêche la collecte d'un thread dans C#?
- 30. la collecte d'une valeur textarea