lua绑定的单例类在析构函数中崩溃



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

我想知道的原因是因为现在我的程序偶尔会在我的单例类的析构函数中出现分段错误。Lua是否试图在实例已经销毁之后对其进行垃圾收集?如果是这样,我如何防止它这样做?下面是声明:

public:
        static App* GetInstance();
        ~App();
        void Execute();
    private:
        App();
在Lua中,我调用
app = App.getInstance()
app:execute()

,当一切都完成后,它崩溃了。这里到底发生了什么?

程序绑定是这样的(很多属性都被省略了)

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

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

最新更新