当前位置: 首页 > news >正文

雄安移动网站建设/四川旅游seo整站优化站优化

雄安移动网站建设,四川旅游seo整站优化站优化,做框架图的网站,西宁手机网站微站建设题目不知道怎么取才好,但是意思很简单: 如果你暴露一个复杂对象给Lua,实现类似于OO编程的话,那么也要把析构函数暴露给Lua. 否则的话,lua gc的时候,回收垃圾对象,没有找到回收函数,就直接free掉了,这在C中,是相当致命的. tolua中的tolua_cclass函数,用来注册lua对象, TOLUA_API…

题目不知道怎么取才好,但是意思很简单:

如果你暴露一个复杂对象给Lua,实现类似于OO编程的话,那么也要把析构函数暴露给Lua.

否则的话,lua gc的时候,回收垃圾对象,没有找到回收函数,就直接free掉了,这在C++中,是相当致命的.

 

tolua++中的tolua_cclass函数,用来注册lua对象,

TOLUA_API void tolua_cclass (lua_State* L, const char* lname, const char* name, const char* base, lua_CFunction col)

 同时会把最后的那个参数col,注册到lua对象的元表里面:

static void push_collector(lua_State* L, const char* type, lua_CFunction col) {/* push collector function, but only if it's not NULL, or if there's nocollector already */if (!col) return;luaL_getmetatable(L,type);lua_pushstring(L,".collector");//....lua_pushcfunction(L,col);//....

 而发生gc的时候,class_gc_event函数会去在lua对象的元表里面找".collector"这个key,如果没找到,就用default的析构,否则就用用户提供的析构函数:

	top = lua_gettop(L);if (tolua_fast_isa(L,top,top-1, lua_upvalueindex(2))) /* make sure we collect correct type */{/*fprintf(stderr, "Found type!\n");*//* get gc function */lua_pushliteral(L,".collector");lua_rawget(L,-2);           /* stack: gc umt mt collector */if (lua_isfunction(L,-1)) {/*fprintf(stderr, "Found .collector!\n");*/}else {lua_pop(L,1);/*fprintf(stderr, "Using default cleanup\n");*/lua_pushcfunction(L,tolua_default_collect);//这个是默认的析构函数}lua_pushvalue(L,1);         /* stack: gc umt mt collector u */lua_call(L,1,0);

 而默认的析构函数是C free的简单封装:

TOLUA_API int tolua_default_collect (lua_State* tolua_S)
{void* self = tolua_tousertype(tolua_S,1,0);free(self);return 0;
}

 

如果你通过tolua++注册一个复杂类型给lua的话,析构函数不被调用,而直接调用了free,会发生很多未定义行为.

这就是在我们服务器中隐藏了超过两年的一个Bug......

http://www.jmfq.cn/news/5294575.html

相关文章:

  • 网站开发编程环境/大数据营销软件
  • 想开个网站怎样开公司/网络推广技巧
  • 哈尔滨网站建设/含有友情链接的网页
  • 腾讯风铃wordpress/克州seo整站排名
  • 湖北省税务局网站建设方/快速建站教程
  • 余姚做企业网站/网络软文范例
  • 一个公网ip可以做几个网站/友情链接可以帮助店铺提高浏览量
  • 人大网站建设汇报/宁波seo外包服务商
  • 建网站需要了解哪些网站建设知识/免费制作网页平台
  • 涞源县住房和城乡建设局网站/怎么找需要做推广的公司
  • 做排名的网站哪个好/汕头网站推广
  • 网站维护和网页维护区别/建站网站关键词优化
  • 做外墙资料的网站/苏州整站优化
  • 温州如何进行网站推广/学电子商务出来能干嘛
  • 网站开发未来发展趋势/网站推广系统
  • 网站制作的动画怎么做的/域名是什么 有什么用
  • 做网站专用图标/竞价推广代运营企业
  • 腾讯云做视频网站吗/百度指数的基本功能
  • 徐汇郑州阳网站建设/电商平台推广
  • 三网合一的模板网站/推广策略
  • 电脑可以做网站吗/安徽seo报价
  • 做ppt介绍网站/网络营销和传统营销的区别和联系
  • 网站开发一定要用框架吗/网站推广方案模板
  • 青海医院网站建设公司/百度惠生活推广怎么收费
  • 教育类网站模板/辽宁seo推广
  • 潍坊网站建设费用/河南省郑州市金水区
  • 高质量的常州网站建设/深圳百度seo代理
  • 建设工程业绩查询网站/有哪些实用的网络推广方法
  • 中国建设银行的网站/电商平台开发需要多少钱
  • 在哪里建设网站/网络策划营销