Lua绑定的单例类的析构函数崩溃了。

我第一次使用 Lua 和 luabind,我一直在思考以下的问题。如果我在 C++ 中声明了一个 singleton 类并将其绑定到 Lua,当我获取它的实例并调用一些方法时,哪种语言拥有该实例?

我之所以在想这个问题,是因为现在我的程序有时会在 singleton 类的析构函数中崩溃。是 Lua 在实例已经被销毁后尝试进行垃圾回收吗?如果是这样,我应该如何防止它这样做?声明如下:

public:
        static App* GetInstance();
        ~App();
        void Execute();

    private:
        App();

在 Lua 中,我调用:

app = App.getInstance()
app:execute()

当所有东西结束后,它就崩溃了。这里到底发生了什么?

luabind 看起来像这样(省略了很多属性)

module(L, "nge")
[
        class_<App>("App")
            .scope
            [
                def("getInstance", &App::GetInstance)
            ]
            .def("execute", &App::Execute)
]
点赞
用户847349
用户847349

你应该注意生命周期,因为你正在返回一个裸指针。Luabind 可能会删除你的实例。也许你应该改用 shared_ptr。Luabind 可以做到这一点:http://www.rasterbar.com/products/luabind/docs.html#smart-pointersLuaBridge 的文档有一个很好的章节,可以帮助理解这个问题。

2013-06-07 10:07:15