Добавлен
Для автоматического удаления объектов использую следующий код:
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?

Принятый ответ

А в мультиплеере это еще и чревато десинками т.к. работа сборщика мусора не синхронится и в принципе не может синхрониться.
`
ОЖИДАНИЕ РЕКЛАМЫ...
1
24
4 года назад
1
А в мультиплеере это еще и чревато десинками т.к. работа сборщика мусора не синхронится и в принципе не может синхрониться.
Принятый ответ
0
13
4 года назад
0
prog, хм... Даже в голову не приходило, пожалуй при таком раскаде вовсе откажусь от автосборки такого мусора
0
37
4 года назад
0
Зачем это всё надо? Вы пишете автопилот для самолета?)
0
17
4 года назад
0
DestoyFrame создаёт десинки, хендлы начинают прыгать у разных игроков (1.31)
в рефордже collect garbage вообще был выпилен (мб вернули в последних обновах)
Загруженные файлы
Чтобы оставить комментарий, пожалуйста, войдите на сайт.