我正在使用Lua& luabind第一次,我一直在想下面的问题。如果我在C ++中声明一个单例类,并将它绑定到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)
]
答案 0 :(得分:0)
你应该照顾一生,因为你正在返回一个赤裸的指针。 Luabind可能正在删除您的实例。也许您应该切换到为您的实例使用shared_ptr。 Luabind可以这样做:http://www.rasterbar.com/products/luabind/docs.html#smart-pointers。 The documentation of LuaBridge有一个很好的章节,这可能有助于理解这个问题。