对象有问题,不再需要但仍有引用.结果:由于未收集对象,分配的内存大小不断增加.
如何解决这类问题?有没有办法找到只有一个引用的对象,或者生命周期超过某个值的对象?或任何其他解决方案?
使用Lua 5.1和C++与luabind.
谢谢.
正如有人在这里提到的那样,你可以尝试使用弱表.
如果你有这样的代码:
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