当前位置:  开发笔记 > 编程语言 > 正文

在Lua丢失了引用

如何解决《在Lua丢失了引用》经验,为你挑选了1个好方法。

对象有问题,不再需要但仍有引用.结果:由于未收集对象,分配的内存大小不断增加.

如何解决这类问题?有没有办法找到只有一个引用的对象,或者生命周期超过某个值的对象?或任何其他解决方案?

使用Lua 5.1和C++与luabind.

谢谢.



1> kikito..:

正如有人在这里提到的那样,你可以尝试使用弱表.

如果你有这样的代码:

myListOfObjects = {}
...
table.insert(myListOfObject, anObject)

然后一旦anObject停止使用,它将永远不会被释放,因为myListOfObjects仍然引用它.

您可以尝试删除引用myListOfObjects(将引用设置为nil),但更简单的解决方案是声明myListOfObjects弱表:

myListOfObjects = {}
setmetatable(myListOfObjects, { __mode = 'v' }) --myListOfObjects is now weak

如果它setmetatable返回对它修改的表的引用,你可以使用这个更短的习语,它与前两行相同:

myListOfObjects = setmetatable({}, {__mode = 'v' }) --creation of a weak table

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有