摆脱Lua中的类的实例

时间:2018-12-24 17:14:13

标签: oop lua lua-table metatable

我目前正在尝试在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

1 个答案:

答案 0 :(得分:2)

通常,您无需执行任何操作即可摆脱实例或任何其他类型的表。垃圾收集器自动释放任何未引用的表的内存。如果确实需要在表超出范围之前释放一些内存,只需将nil分配给它的变量,然后垃圾收集器将完成其余工作。

您的destroy方法没有任何作用,因为self只是一个参数(它是一个局部变量)。直接分配给它不会影响呼叫者可以看到的任何内容。