0

我是第一次使用 Lua 和 luabind,我一直想知道以下问题。如果我在 C++ 中声明一个单例类,并将其绑定到 Lua,我在 Lua 中获取它的实例并调用一些方法,那么哪种语言实际上拥有该实例?

我想知道的原因是因为目前我的程序偶尔会在我的单例类的析构函数中出现段错误。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)
]
4

1 回答 1

0

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

于 2013-06-07T10:07:15.457 回答