Связанный с Lua синглтон-класс падает в деструкторе

Я использую 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)
]

0

Решение

Вы должны позаботиться о времени жизни, так как вы возвращаете голый указатель. Luabind может удалить ваш экземпляр. Возможно, вам следует перейти к использованию shared_ptr для вашего экземпляра. Luabind может сделать это: http://www.rasterbar.com/products/luabind/docs.html#smart-pointers . Документация LuaBridge есть хорошая глава по этому вопросу, которая может помочь понять проблему.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]