Добавлен
Обязательно ли очищать хеш-таблицу через FlushChildHashtable(...)? Смотрел на сайтах wc3c.net, hiveworkshop.com разные наработки и нигде не увидел данную функцию, в то время как на этом сайте её всё же используют.

Говоря прямо о вопросе треда, замечу, что FlushChildHashtable стоит применять перед сохранением данных в хэш-таблицу при условии, что в конкретной ячейке таблицы гипотетически что-то может находиться (i.e. данные в неё кладутся БЕЗ использования GetHandleId).

бояться утечек нечего
Просто в качестве примера: я где-то встречал огромную систему динамического изменения текстур террейна посредством уберсплатов, которая при определённых условиях с достаточно большой скоростью выпиливала старые и создавала новые; в этой системе уберсплаты не утекали, но, случись такое, выделенные 2 гига оперативы кончились бы относительно быстро.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
23
Похожие вопросы:

ответ
Если имеется в виду очистить по первому ключу, то это FlushChildHashtable(hashtable, parentKey).
Если очистить по двум ключам, то можно просто записать в эту ячейку null.
По второму вопросу — конечно, можно, храни и загружай когда хочешь -_-
ответ
Зависит от прокладки между стулом и клавиатурой. На вкус и цвет, как говорится.
ответ
Для спеллов достаточно хештаблицы, массивы самое то для всяких систем перемещения, молний, очень часто повторяющихся операций с большими числом объектов....
Часто системы идут уже с собственным системами хранения данных, timer utils юзает свой атач на таймер или хештаблицу, ну и так далее.

32
ScopteRectuS, нужно если вы не собрались использовать эту ячейку еще раз.
Там где единожды записанные данные используются все время до конца игры нет нужды очищать таблицу, ну а так где 1 раз за всю игру, разумеется стоит очищять.
Темболее сейчас часто используют наработки вроде TimerUtils и структур vJass, а там записть только 1 целого числа и удаление его RemoveSavedInteger (или как то так, я уже и забыл)
21
quq_CCCP, Понял, а если в ячейке хранится тип int, real, bool, string, texttag их же можно не удалять?
а где хранится тип handle, то обязательно удалять? иначе будет утечка?
21
nvc123, DracoLich писал обратное, и его можно создавать локально и это не вызовет десинк.
30
ScopteRectuS, нельзя создавать локально экземпляры тех объектов, состояние которых так или иначе подлежит синхронизации между игроками (при этом у синхронизируемых объектов зачастую есть несинхронизируемые характеристики состояния).
Тем не менее, возможность создавать что-то локально без приведения к десинхронизации никак не говорит о том, что такие объекты не могут вызывать т.н. "утечек".

Относительно texttag стоит заметить, что это не текст, а расположеный в игровом пространстве объект, этот текст выводящий. Сам текст, являющийся string чистить бессмысленно, за деталями - в статьи на сайте (с учётом реализации таблицы строк в JASS) или в википедии (для более общих или иных частных случаев).

Да и в целом советую почитать про то, что такое хеш-таблица.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.