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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
18
SaveUnitHandle(Hashtable, id, CreateUnit(...))
FlushChildHashtable(Hashtable, id)
Под переменной val уже имелось ввиду наличие созданного объекта. (см. название вопроса)
Hate:
вы же очищаете все дочерние ячейки, это же в названии написано самой функции

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

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

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

Vlod:
function(...)
local u = CreateUnit(...)
endfunction
""
надо написать set u = null перед endfunction

Так понятнее?
30
Конечно я могу ошибаться, но в этом случае счетчик ссылок объекта u никогда не достигнет нуля.
Объект u всего лишь указатель на созданного юнита, который повиснет в памяти, если не сделать set a = null. Какой ещё счётчик ссылок у него может быть?
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.