Приветствую всех. Собственно вопрос в том: стоит ли обнулять переменную Group после очищения и разрушения отряда? И если не обнулить, произойдет ли утечка? Знаю, что много тем было по данному вопросу, но все же..
function Test takes nothing returns nothing
    local group Group = CreateGroup( )
    call GroupEnumUnitsOfPlayer( Group, Player( 0 ), null )
    ...
    call GroupClear( Group )
    call DestroyGroup( Group ) 
endfunction

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

Могу ответить не совсем точно, но верно.
Ты очистил и удалил группу, но переменная хранит в себе пустой объект => нужно очистить ее.
`
ОЖИДАНИЕ РЕКЛАМЫ...
2
13
8 лет назад
2
Могу ответить не совсем точно, но верно.
Ты очистил и удалил группу, но переменная хранит в себе пустой объект => нужно очистить ее.
Принятый ответ
0
1
8 лет назад
0
NekoriDes:
Могу ответить не совсем точно, но верно.
Ты очистил и удалил группу, но переменная хранит в себе пустой объект => нужно очистить ее.
Переменные в jass, которые связаны с handle - это же некое подобие указателя, т. е. это просто какое-то число, указывающее на ячейку памяти или что-то вроде этого. После вызова функции разрушения отряда объект перестает существовать( память, выделенная под объект, освобождается ), остается только переменная-указатель, которая на этот объект уже не влияет, т. к. его нет. Или я что-то путаю? И разве локальные переменные не хранятся в локальном стеке, который при выходе из функции очищается?
4
13
8 лет назад
Отредактирован NekoriDes
4
Idency, число хранят в себе числовые переменные, остальные - объекты (кроме логической) и их нужно обнулять. Так мне объяснили и так пишут в статьях. То есть если ты уничтожил группу, то переменная все равно что-то в себе хранит.
но, к слову, не все ли равно? Безопасности ради - лучше обнулять все, что вызывает подозрения. Лучше написать пару лишних строчек и спать спокойно, имхо.
И разве локальные переменные не хранятся в локальном стеке, который при выходе из функции очищается?
Очищается в том случае, если юзаешь JassHelper. Он добавляет в код необходимые строки (set var = null) Иначе - утечки же.
0
15
8 лет назад
0
Надо разрушить ее и присвоить null.
А вообще об этом написано в разделе статьи. Кстати ,в common.j ты найдёшь типы.
0
1
8 лет назад
0
Ладно, не совсем те ответы, которые я хотел увидеть. Но, думаю, вопрос исчерпан.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.