【发布时间】:2010-10-24 09:53:39
【问题描述】:
好的,所以我有一个使用 SWIG 向 Lua 公开的 C++ 类。该脚本创建对象,但管理器类也有一个指向该对象的指针,因此无论出于何种原因都可以在 C++(或其他脚本)中对其进行修改。
问题是,当脚本完成对象被释放时,如何控制垃圾收集器收集的内容而无需实现 gc 元方法?
这是一个例子:
--Script that creates the object
someObject = Utils.Object("Obj name");
现在对象已经向管理器注册了自己,因此应用程序的其余部分(和其他脚本)可以访问它。
--Another script
obj = ObjManager:GetObject(0);
显然不是一个非常现实的例子,但希望它能说明我的问题。有没有办法在 C++ 中不使用 gc 元方法来否决垃圾收集器?
只是为了澄清管理器是用 C++ 编写的,而 Utils 是包含公开类的模块名称。该对象还在其构造函数中将自身注册到管理器。
提前致谢。
【问题讨论】:
-
如果您标记每个代码片段以了解代码片段是 C++ 还是 Lua,这将有所帮助。
-
对,我用 lua cmets 标记了它们。
标签: c++ garbage-collection lua