繁体   English   中英

如何在Lua和C ++中正确清理类?

[英]How do I clean up the classes properly in Lua and C++?

我曾经用Luabind将类绑定到Lua。 我需要确保通过myClass = nil销毁该类或将其设置为null时,正确处理了该类。

此类将自身添加到其内部的静态列表中,如下所示:

template<typename T>
class component : public componentInterface
{
        public:
                static std::list<componentInterface *> list;
                component() : componentInterface()
                {
                        di::component<T>::list.push_back(this);
                }
                ~component()
                {
                        di::component<T>::list.remove(this);
                }
};

当析构函数被调用时,它会立即从列表中删除。

您不必做任何事情。 只要Lua正在创建对象,或者Lua已经采用了该对象,Luabind都会确保将调用析构函数。

但是,Lua是垃圾收集的。 这意味着在删除对对象的最后一个引用之后,不一定会立即调用析构函数。 实际上,Lua可以无限期地等待,直到释放实际的lua_State对象。

如果更直接对您很重要,则可以执行以下任一操作:

  • 在Lua可以调用的对象上有一个dispose方法,以尽早销毁它。 因此,Lua有责任在进行此调用后使用该对象。

  • 通过调用collectgarbage执行垃圾收集器,以便收集垃圾。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM