我使用Luabind将一个类绑定到Lua。我需要确保在被破坏或通过myClass = nil
使其为空时正确处理该类。
这个类将自己添加到自身内部的静态列表中,如下所示:
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);
}
};
当析构函数被调用时,它会立即从列表中删除它。
答案 0 :(得分:2)
您无需做任何事情。只要Lua正在创建对象,或者Lua已经采用了该对象,Luabind将确保将调用析构函数。
然而,Lua是垃圾收集。这意味着在删除对象的最后一次引用后,析构函数不一定会立即被称为 。实际上,Lua可以无限期地等待,直到释放实际的lua_State对象。
如果更直接对您很重要,那么您可以执行以下操作之一:
在Lua可以调用的对象上有一个dispose
方法来提前销毁它。因此,Lua有责任在进行此调用后不使用该对象。
执行calling collectgarbage
垃圾收集器,以便收集垃圾。