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

时间:2013-08-27 02:45:24

标签: c++ memory-management lua

我使用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);
                }
};

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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

  • 执行calling collectgarbage垃圾收集器,以便收集垃圾。