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

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

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

点赞
用户734069
用户734069

你不需要做任何事情。只要 Lua 创建了对象,或者 Lua 采用了对象,Luabind 就会确保析构函数被调用。

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

如果更加即时性对你很重要,则可以执行以下操作之一:

  • 在对象上拥有一个 dispose 方法,Lua 可以调用它来早些时候销毁对象。因此,Lua 负责在调用此方法后 再使用该对象。

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

2013-08-27 03:02:08