[英]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.