Добавлен scopterectus
Привязываю к юниту что-то через хеш-таблицу, например:
call SaveInteger( hashtable, GetHandleId( whichUnit ), 0, integer )
Но привязываю, только, если ранее к этому юниту не привязывалось, то есть:
if not HaveSavedInteger( hashtable, GetHandleId( whichUnit ), 0 ) then
call SaveInteger( hashtable, GetHandleId( whichUnit ), 0, integer )
endif
Так вот, проблема вот в чем: на карте создаётся огромное количество юнитов и к ним крепятся данные, как написано выше. Эти юниты удаляются после смерти и их хендл освобождается, для другого нового созданного юнита. И в итоге, я к юниту не могу что-либо крепить, потому что проверка выдаёт, что в хеш-таблице по данному ключу уже что-то сохранено, потому что новый юнит занял хендл старого юнита. Как это обойти?
Принятый ответ
вариант №1 - не нулить переменные, оставляя утечки номеров хендлов. это безопасно, да, если знаешь, что делаешь.
№2 - ловить UNIT_DEATH и чистить за ним
№2 - ловить UNIT_DEATH и чистить за ним
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
№2 - ловить UNIT_DEATH и чистить за ним
Отредактирован Кет
с первым могут быть проблемы если есть арифметика с хэндлами
да и делать намеренную утечку памяти вместо того чтобы просто чистить за собой данные это какой-то жуткий костыль
это не утечка, это сохранение id хендла, не более. на память не влияет от слова никак, разрушь объект - и сборщик его уберет.
Отредактирован nvc123
DracoL1ch, на память это влияет как минимум тем что хэш таблица забита не используемыми значениями