Использование C ++ , lua 5.1 , luabind 0.7-0.81
Попытка создать класс lua с parent и сохранить его в luabind :: object.
Lua
class 'TestClassParent'
function TestClassParent:__init()
print('parent init\n')
end
function TestClassParent:__finalize()
print('parent finalize\n')
end
class 'TestClass' (TestClassParent)
function TestClass:__init()
print('init\n')
TestClassParent.__init(self)
end
function TestClass:__finalize()
print('finalize\n')
end
C ++
{
luabind::object obj = luabind::call_function<luabind::object>(lua_state, "TestClass");
}
printf("before GC\n");
lua_gc(lua, LUA_GCCOLLECT, 0);
printf("after GC\n");
выход
INIT * 1024. *
родительский инициатор
до GC
после GC
Результат: После уничтожения объекта obj экземпляр «TestClass» остается активным после цикла сборки мусора (метод __finalize не вызывается и память не освобождается). Уничтожается только при выходе из программы.
Больше Если я использую класс без родителя, мусор собирается правильно.
Если я пытаюсь использовать принять политику (чтобы стать владельцем созданного объекта)
luabind::object obj = luabind::call_function<luabind::object>(lua_state, "TestClass")[luabind::adopt(luabind::result)];
Я получаю:
- in luabind 0.7 - тот же результат, что и без политики принятия
- in luabind 0.81 - сбой с сообщением «вы пытаетесь использовать незарегистрированный тип»
Как правильно создать объект lua в C ++ и взять его в собственность ?