Lua中摆脱类的实例

我目前正在尝试在Lua中使用面向对象编程。从这里了解到,类的实例甚至是类本身(变量)都是对类所持有的各个位和碎片的引用。因此,如果我有一个方法::destroy(),由

function class:destroy()
  self = nil
end

当我调用instance:destroy()时,引用_instance_应该被垃圾回收器捡起,实际上,实例_作为一个对象_就消失了。

它不会抛出错误或缓慢地导致内存泄漏,是吗?

编辑:我想也许我应该包括以下内容。

这是我用来创建实例的方法

function class:new(o)
  o = o or {}
  setmetatable(o,self)
  self.__index = self
  return o
end
点赞
用户3574628
用户3574628

一般情况下,你不需要做任何操作来摆脱实例或任何其他类型的表。垃圾收集器会自动释放任何不被引用的表的内存。如果您确实需要在表超出作用域之前释放一些内存,只需将它的变量赋值为 nil,垃圾收集器将执行其余部分。

你的 destroy 方法没有任何效果,因为 self 只是一个参数(即局部变量)。直接分配给它不能影响调用者所能看到的任何东西。

2018-12-24 21:49:38