我目前正在尝试在Lua进行OOP。根据我对here的了解,类的 instance 甚至是 class (变量)本身都是对各种位和引用的引用。类成立,所以如果我有一个方法:destroy(),由
组成function class:destroy()
self = nil
end
当我调用instance:destroy()
时,引用 instance 应该由垃圾收集器拾取,实际上,实例如在对象中不见了。
它不会引发错误或缓慢地导致内存泄漏,对吧?
编辑:我认为也许我也应该包括以下内容。
这是我用来创建和实例化的方法
function class:new(obj)
obj = obj or {}
setmetatable(o,self)
self.__index = self
return o
end
答案 0 :(得分:2)
通常,您无需执行任何操作即可摆脱实例或任何其他类型的表。垃圾收集器自动释放任何未引用的表的内存。如果确实需要在表超出范围之前释放一些内存,只需将nil
分配给它的变量,然后垃圾收集器将完成其余工作。
您的destroy
方法没有任何作用,因为self
只是一个参数(它是一个局部变量)。直接分配给它不会影响呼叫者可以看到的任何内容。