1

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

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

4

1 回答 1

2

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

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

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

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

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

于 2013-08-27T03:02:08.963 回答