Подскажите, создает ли данный код утечку:
SaveHashtableHandle( Hashtable, id , 0, val )
FlushChildHashtable( Hashtable, id )
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
17
4 года назад
0
NazarPunk:
А вы хоть читали откуда берутся утечки?
а вы?
0
29
4 года назад
Отредактирован nazarpunk
0
а вы?
А я не задаю вопросов, ответ на которые есть в статьях.

SaveHashtableHandle( Hashtable, id , 0, val )
FlushChildHashtable( Hashtable, id )
Откуда здесь утечки, если вы не создаёте хэндлов, которые повиснут в памяти?
3
26
4 года назад
3
вы же очищаете все дочерние ячейки, это же в названии написано самой функции
0
17
4 года назад
Отредактирован Vlod
0
SaveUnitHandle(Hashtable, id, CreateUnit(...))
FlushChildHashtable(Hashtable, id)
Под переменной val уже имелось ввиду наличие созданного объекта. (см. название вопроса)
Hate:
вы же очищаете все дочерние ячейки, это же в названии написано самой функции

Вопрос про обнуление элемента, так как в других структурах, будь то глобальный массив или локальная переменная, объект не удалится, если не вписать туда null.
0
18
4 года назад
0
Представь что handle это тот же integer
просто содержит ссылку на какой то игровой объект
0
26
4 года назад
0
как сказали выше, хендл это не сам объект а ссылка на него, что бы его уничтожить нужно вручную вызывать соответствующие функции, сам по себе он наврятли исчезнет (офк в разумных пределах)
0
17
4 года назад
0
Представь что handle это тот же integer
просто содержит ссылку на какой то игровой объект
handle это и так __int32, каким образом эта информация говорит о работе счетчика ссылок?
Hate, спасибо за полезную информацию, не могли бы вы ответить на тему самого вопроса?
0
29
4 года назад
Отредактирован nazarpunk
0
не могли бы вы ответить на тему самого вопроса?
Могу и я ответить
Нужно ли обнулять handle в хеш-таблице?
Нужно.

Неужели так уж сложно немного подумать?
local handle a = GetHandleId() -- создаём хэндл
call SaveHashtableHandle( Hashtable, id , 0, val ) -- в хэштаблице по ключам id,0 появилось значение этого хэндла
call FlushChildHashtable( Hashtable, id ) -- все записи по ключу id исчезли из таблицы
set a = null -- хэндл никуда не делся и его нужно обнулить
0
18
4 года назад
Отредактирован Hodor
0
Vlod,
А тебе в голову не приходила мысль что FlushChildHashtable очищает, так же как и RemoveSavedHandle
И каким образом обычное присваивание null может влиять на так называемый "счетчик ссылок"?
Я бы даже так сказал: если не делать FlushChildHashtable или RemoveSavedHandle - то это как раз и будет утечкой
0
17
4 года назад
0
И каким образом обычное присваивание null может влиять на так называемый "счетчик ссылок"?
function(...)
local u = CreateUnit(...)
endfunction
Конечно я могу ошибаться, но в этом случае счетчик ссылок объекта u никогда не достигнет нуля.
0
18
4 года назад
0

Немного мат части:
Если в хештаблице не существует ключа, то хештаблица всегда будет возвращать ноль (он же null)
Поэтому возникает иллюзия что FlushChildHashtable (и прочие) равны обычному присваиванию null или 0
Vlod,
это долго объяснять, просто не парься если хендл-переменная не локалка
а если локалка - то в конце функции обнуляй её
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.