Избавление от экземпляра класса в Lua - PullRequest
0 голосов
/ 24 декабря 2018

Я сейчас пытаюсь сделать ООП в Луа.Из того, что я понял здесь , экземпляр класса и даже 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 голосов
/ 25 декабря 2018

Как правило, вам не нужно ничего делать, чтобы избавиться от экземпляра или любого другого вида таблицы.Сборщик мусора автоматически освобождает память любой таблицы, на которую ничего не ссылается.Если вам действительно нужно освободить часть памяти, прежде чем таблица выйдет из области видимости, просто присвойте nil ее переменной, и сборщик мусора сделает все остальное.

Ваш метод destroy не имеет никакогоэффект, потому что self это просто параметр (который является локальной переменной).Присвоение ему напрямую не может повлиять на то, что видит вызывающий.

...