Добавлен Nelloy
Для автоматического удаления объектов использую следующий код:
private.data = setmetatable({}, {__mode = 'k'})
private.db = setmetatable({}, {__mode = 'kv'})
---@param self Object
---@param obj any
function newObject(self, obj, destructor)
local priv = {
obj = obj,
destructor = destructor
}
private.data[self] = setmetatable(priv, private.metatable)
private.db[obj] = self
end
function destroy(priv)
if priv.obj then
priv.destructor(priv.obj)
end
priv.obj = nil
end
private.metatable = {
__gc = destroy
}
Столкнулся с крашами при завершении игры после создания через эти функции предметов или фреймов. Экспериментально выявлено, что причина в функции destroy. Но эта функция ведет себя совершенно нормально, если вызывать ее вручную. Предполагаю, что это вызвано попыткой уничтожить через луа объект, который уже уничтожен в движке вара. И собственно вопрос, можно ли как-то проверить валидность данных или объектов wc3?
Принятый ответ
А в мультиплеере это еще и чревато десинками т.к. работа сборщика мусора не синхронится и в принципе не может синхрониться.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
в рефордже collect garbage вообще был выпилен (мб вернули в последних обновах)