XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
Ksan

offline
Опыт: 13,248
Активность:
"null == destroy" or "null != destroy"?
local unit U
local location L
set L = GetUnitLoc(U)
PolledWait (2)
set L = null
local unit U
local location L
set L = GetUnitLoc(U)
PolledWait (2)
call RemoveLocation(L)
Собсно вопрос - чем отличаются последние строчки? В чем различие между их действиями?
Старый 28.04.2010, 19:39
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
Ksan, все не правильно
local unit U
local location L
set L = GetUnitLoc(U)
вместо вейта используй таймеры, триггеры, но не вейты.
call RemoveLocation(L)
set L = null
set U=null
Старый 28.04.2010, 19:41
Ksan

offline
Опыт: 13,248
Активность:
AlexKARASb, я не просил поправлять код =\ я и так знаю, что юнита тоже надо обнулять, но не стал забивать тут лишние строчки. Зри вопрос =\
Ksan добавил:
Да и мя вейты пока устраивают, а локальные таймеры на кс я не научился делать еще
Старый 28.04.2010, 19:43
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
Ksan, -.- вот ответ:
call RemoveLocation(L)
set L = null
одно от другого зависит
  1. ремув, ты удаляешь точку
  2. сет = нул, ты очищаешь локалку
Старый 28.04.2010, 19:43
Ksan

offline
Опыт: 13,248
Активность:
То бишь нулл не засоряет память локалкой, а дестрой точкой?
Старый 28.04.2010, 19:45
_Red

offline
Опыт: 4,095
Активность:
null это просто очищение ссылки(как бы ярлыка) на объект, а RemoveLocation еще и удаляет сам объект, но обезательно нужно удалить и ссылку на объект
это как на компе, если устанавливать кучу программ, а удалять только ярлыки, произойдет захламление,
но если и ярлыки не удалять тоже произойдет захламление
попытался объяснить понятно
З.Ы. вейты - зло
Старый 28.04.2010, 19:46
XOR

offline
Опыт: 38,159
Активность:
прочитай еще раз статью по jass, null - обнуление переменной. с локалками - высвобождение хэндла. Вначале удаляешь сам хэндл, потом обнуляешь переменную в которой оно содержится.
Старый 28.04.2010, 19:46
Mr_ILYAS
Kicked by XimikS
offline
Опыт: 492
Активность:
в верхнем ты просто удаляешь ссылку (ярлык) на объект, а в нижнем случае удаляешь сам объект
и можно сразу присваивать переменной значение как только создаешь её:
local location L=GetUnitLoc(U)
и сначало надо уничтожать объект а потом его ссылку, а не наоборот.
иначе, если обнулить переменную раньше, то от строки call RemoveLocation(L) не будет толку, так как в L уже ничего не будет
Лол, пока писал ответ уже 6 постов написали. . .
Старый 28.04.2010, 19:46
agentex

offline
Опыт: 34,834
Активность:
remove - удаление самого обьекта из памяти.
null - удаление ссылки на хендл

Отредактировано agentex, 29.04.2010 в 01:21.
Старый 28.04.2010, 19:46
Ksan

offline
Опыт: 13,248
Активность:
agentex, XimikS, _Red, Mr_ILYAS, сенкс за то что обьяснили где хлеб, а где колбаса =)
Mr_ILYAS, но ведь если я задам точку прежде чем задам юнита, то точка будет = 0. Или я не прав?
Старый 28.04.2010, 19:50
16GB
GhostOne User
offline
Опыт: 60,317
Активность:
Ksan,
прав но в коде ты сначало юнита а потом точку
Старый 28.04.2010, 19:51
agentex

offline
Опыт: 34,834
Активность:
но ведь если я задам точку прежде чем задам юнита, то точка будет = 0
умрет поток, т.к. U не инициализирована.
Старый 28.04.2010, 19:54
Ksan

offline
Опыт: 13,248
Активность:
16GB, ну. Но если сделать local location L=GetUnitLoc(U) до юнита, то точка будет = 0. Да и часто бывает так, что локалку нужно менять в действии триггера. Так что сет - лучше чем задавать сразу.
Старый 28.04.2010, 19:55
Mr_ILYAS
Kicked by XimikS
offline
Опыт: 492
Активность:
да естественно, всё надо в своём порядке делать, тут даже логический можно догадаться.
и кстати для всех объектных данных (а именно: все, кроме интеджер, реал и булен) пустое значение обозначается как null, а не 0
Старый 28.04.2010, 19:57
adic3x

offline
Опыт: 108,439
Активность:
null - очищение локальной переменной, под которую тоже была выделена память.
ты не шаришь, локалки создаются в стеке
нулл уменьшает ref counter хендла, и они не текут, когда вы это поймете?
ADOLF добавил:
сама фраза обнулить локалку - бесмысленна, т.е. да, обнуляем, но суть - удалить ссылки на хендл
Старый 29.04.2010, 00:41
agentex

offline
Опыт: 34,834
Активность:
ADOLF, хендл - это обьект, содержащий адрес другого обьекта (точки к примеру) ?
Старый 29.04.2010, 00:54
adic3x

offline
Опыт: 108,439
Активность:
хендл - это обьект, содержащий адрес другого обьекта (точки к примеру) ?
хендл - это дескриптор, с аддрессами он может быть не связан. но с его помощью да, можно получить ажжресс обьекта
Старый 29.04.2010, 01:00
agentex

offline
Опыт: 34,834
Активность:
и при реф каунт = 0 хендл благополучно уничтожается?
Старый 29.04.2010, 01:09
adic3x

offline
Опыт: 108,439
Активность:
y
ADOLF добавил:
точнее становиться свободным, т.е. теперь можно создать новый обьект с таким же хендлом
Старый 29.04.2010, 01:17
agentex

offline
Опыт: 34,834
Активность:
спасибо за разъяснение :)
Старый 29.04.2010, 01:19
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 13:51.