Я использую Lua & в первый раз, и меня интересует следующая проблема. Если я объявлю одноэлементный класс в C ++ и свяжу его с Lua, где я получу его экземпляр и вызову несколько методов, какой язык на самом деле владеет экземпляром?
Причина, по которой я задаюсь вопросом, заключается в том, что в данный момент моя программа может случайно оказаться в деструкторе моего синглтон-класса. Lua пытается собрать мусор после того, как экземпляр уже уничтожен? Если так, как я могу предотвратить это? Вот декларация:
public:
static App* GetInstance();
~App();
void Execute();
private:
App();
В луа я звоню
app = App.getInstance()
app:execute()
и после того, как все закончилось, он падает. Что именно здесь происходит?
Luabind выглядит следующим образом (многие свойства были опущены)
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 . Документация LuaBridge есть хорошая глава по этому вопросу, которая может помочь понять проблему.
Других решений пока нет …