热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

c–在luabind::object中存储父类的lua类

使用C,lua5.1,luabind0.7-0.81尝试使用parent创建lua类并将其存储在luabind::object中.LUAclass'TestClassPa

使用C,lua 5.1,luabind 0.7-0.81

尝试使用parent创建lua类并将其存储在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(lua_state, "TestClass");
}
printf("before GC\n");
lua_gc(lua, LUA_GCCOLLECT, 0);
printf("after GC\n");

输出:
在里面
父初始
在GC之前
GC之后

结果:obj被销毁后,’TestClass’实例在垃圾收集周期后仍然存活(未调用__finalize方法且未释放内存).它只在程序退出时销毁.
如果我使用没有父级的类,可以正确收集垃圾.

如果我尝试使用采用策略(获取创建对象的所有权)

luabind::object obj = luabind::call_function(lua_state, "TestClass")[luabind::adopt(luabind::result)];

我明白了:

>在luabind 0.7 – 与没有采取政策相同的结果
>在luabind 0.81 – 崩溃并显示消息“您正在尝试使用unregistrerd类型”

如何在C中正确创建lua对象并获​​取其所有权?

解决方法:

这是0.8.1中的已知错误;对最后构造的对象的引用保留在“超级”函数upvalue中.它已修复为0.9-rc1:

http://github.com/luabind/luabind/commit/2c99f0475afea7c282c2e432499fd22aa17744e3


推荐阅读
author-avatar
华东师大中北文艺部
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有