В настоящее время я пытаюсь использовать ООП в Lua. Из того, что я понял, здесь, пример класса и даже сама класс (переменная) являются ссылкой на различные биты и бобы, которые содержит класс, поэтому, если у меня есть метод: destroy (), состоящий из
function class:destroy()
self = nil
end
когда я вызываю instance:destroy(), ссылка пример должна быть подхвачена уборщик мусора, и практически экземпляр как в объекте исчезает.
Это не вызовет ошибку и не вызовет медленную утечку памяти, верно?
Обновлено: Я подумал, что, возможно, мне также следует включить следующее.
Это метод, который я использую для создания и экземпляра
function class:new(obj)
obj = obj or {}
setmetatable(o,self)
self.__index = self
return o
end


Как правило, вам не нужно ничего делать, чтобы избавиться от экземпляра или любого другого типа таблицы. Сборщик мусора автоматически освобождает память любой таблицы, на которую ничто не ссылается. Если вам действительно нужно освободить часть памяти до того, как таблица выйдет за пределы области видимости, просто назначьте nil ее переменной, а все остальное сделает сборщик мусора.
Ваш метод destroy не имеет никакого эффекта, потому что self - это просто параметр (который является локальной переменной). Назначение напрямую ему не может повлиять ни на что, что видит вызывающий.
Да, но даже в этом нет необходимости, если вы не знаете, что у вас мало памяти.
@ Bogdan705: Даже установка переменной экземпляра на nil ничего не гарантирует. У других людей может быть ссылка на этот объект, поэтому объект будет продолжать существовать. Это не означает, что вы не должен удаляете ссылки на объекты, которые больше не нужны вашему локальному коду, но если вы не уверены, что ни у кого другого в любом месте нет ссылки на него, вы не должны предполагать, что таких ссылок не существует.
Поэтому вместо того, чтобы писать причудливое: destroy (), я должен просто напрямую выполнить instance = nil?