OK, also habe ich eine C++ - Klasse, die Lua mit SWIG ausgesetzt ist. Das Skript erstellt das Objekt, aber eine Verwaltungsklasse weist auch einen Zeiger auf das Objekt auf, so dass es aus irgendeinem Grund in C++ (oder einem anderen Skript) geändert werden kann.Steuerung des Lua5.1-Garbage Collectors
Das Problem ist, dass, wenn das Skript beendet das Objekt frei ist, wie kann ich kontrollieren, was der Müllsammler sammelt, ohne ein GC-Metamethode zu implementieren? Hier
ein Beispiel:
--Script that creates the object
someObject = Utils.Object("Obj name");
nun das Objekt selbst mit dem Manager registriert hat, damit der Rest der Anwendung (und anderen Skripte) darauf zugreifen kann.
Klar kein sehr realistisches Beispiel, aber hoffentlich illustriert es meine Frage. Gibt es eine Möglichkeit, den Garbage Collector ohne eine GC Metamethode in C++ zu veto?
Nur um zu verdeutlichen, der Manager ist in C++, und Utils ist der Modulname Gehäuse der exponierten Klasse. Auch das Objekt registriert sich in seinem Konstruktor beim Manager.
Vielen Dank im Voraus.
Es würde helfen, wenn Sie jedes Codefragment beschriften, ob das Codefragment C++ oder Lua ist. –
Rechts habe ich sie mit lua Kommentare beschriftet. –