En utilisant C++, Lua 5.1, luabind 0.7-0.81Enregistrement d'une classe lua avec les parents dans luabind :: objet
Essayer de créer une classe lua avec les parents et le stocker dans un luabind :: objet.
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");
sortie:
parent d'initialisation d'initialisation
avant GC après GC
Résultat: Après obj est détruit, l'instance 'TestClass est de toujours en vie après le cycle de collecte des ordures (méthode __finalize est pas appelée et la mémoire ne soit pas libérée). Il détruit seulement à la sortie du programme.
Moresome Si j'utilise la classe sans parent, les ordures sont collectées correctement.
Si je tente d'utiliser adopter une politique (pour prendre possession de l'objet créé)
luabind::object obj = luabind::call_function<luabind::object>(lua_state, "TestClass")[luabind::adopt(luabind::result)];
Je reçois:
- dans luabind 0,7 - même résultat que sans adopter une politique
- dans luabind 0.81 - crash avec message "vous essayez d'utiliser un type unregistrerd"
Comment puis-je correctement créer un objet lua en C++ et prendre est la propriété?
Est-ce à propos de problème décrit ici - http://stackoverflow.com/questions/1946465/luabind-class-deriving-problem-memory-leak? – kFk
oui, c'est le même bug. –