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 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
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 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Ksan
offline
Опыт:
13,248Активность: |
AlexKARASb, я не просил поправлять код =\ я и так знаю, что юнита тоже надо обнулять, но не стал забивать тут лишние строчки. Зри вопрос =\
Ksan добавил: Да и мя вейты пока устраивают, а локальные таймеры на кс я не научился делать еще |
28.04.2010, 19:43 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
AlexKARASb
Learning cpp
offline
Опыт:
22,103Активность: |
Ksan, -.- вот ответ:
одно от другого зависит
|
28.04.2010, 19:43 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Ksan
offline
Опыт:
13,248Активность: |
То бишь нулл не засоряет память локалкой, а дестрой точкой? |
28.04.2010, 19:45 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
_Red
offline
Опыт:
4,095Активность: |
null это просто очищение ссылки(как бы ярлыка) на объект, а RemoveLocation еще и удаляет сам объект, но обезательно нужно удалить и ссылку на объект
это как на компе, если устанавливать кучу программ, а удалять только ярлыки, произойдет захламление,
но если и ярлыки не удалять тоже произойдет захламление попытался объяснить понятно
З.Ы. вейты - зло |
28.04.2010, 19:46 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
XOR
offline
Опыт:
38,284Активность: |
прочитай еще раз статью по jass, null - обнуление переменной. с локалками - высвобождение хэндла. Вначале удаляешь сам хэндл, потом обнуляешь переменную в которой оно содержится. |
28.04.2010, 19:46 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Mr_ILYAS
Kicked by XimikS
offline
Опыт:
492Активность: |
в верхнем ты просто удаляешь ссылку (ярлык) на объект, а в нижнем случае удаляешь сам объект
и можно сразу присваивать переменной значение как только создаешь её:
local location L=GetUnitLoc(U) и сначало надо уничтожать объект а потом его ссылку, а не наоборот.
иначе, если обнулить переменную раньше, то от строки call RemoveLocation(L) не будет толку, так как в L уже ничего не будет
Лол, пока писал ответ уже 6 постов написали. . . |
28.04.2010, 19:46 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
agentex
offline
Опыт:
34,534Активность: |
remove - удаление самого обьекта из памяти. null - удаление ссылки на хендл Отредактировано agentex, 29.04.2010 в 01:21. |
28.04.2010, 19:46 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Ksan
offline
Опыт:
13,248Активность: |
|
28.04.2010, 19:50 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
16GB
GhostOne User
offline
Опыт:
59,317Активность: |
Ksan, прав но в коде ты сначало юнита а потом точку |
28.04.2010, 19:51 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
agentex
offline
Опыт:
34,534Активность: |
умрет поток, т.к. U не инициализирована. |
28.04.2010, 19:54 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Ksan
offline
Опыт:
13,248Активность: |
16GB, ну. Но если сделать local location L=GetUnitLoc(U) до юнита, то точка будет = 0. Да и часто бывает так, что локалку нужно менять в действии триггера. Так что сет - лучше чем задавать сразу. |
28.04.2010, 19:55 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Mr_ILYAS
Kicked by XimikS
offline
Опыт:
492Активность: |
да естественно, всё надо в своём порядке делать, тут даже логический можно догадаться.
и кстати для всех объектных данных (а именно: все, кроме интеджер, реал и булен) пустое значение обозначается как null, а не 0 |
28.04.2010, 19:57 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
108,439Активность: |
ты не шаришь, локалки создаются в стеке нулл уменьшает ref counter хендла, и они не текут, когда вы это поймете?
ADOLF добавил: сама фраза обнулить локалку - бесмысленна, т.е. да, обнуляем, но суть - удалить ссылки на хендл |
29.04.2010, 00:41 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
agentex
offline
Опыт:
34,534Активность: |
ADOLF, хендл - это обьект, содержащий адрес другого обьекта (точки к примеру) ? |
29.04.2010, 00:54 | #16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
108,439Активность: |
хендл - это дескриптор, с аддрессами он может быть не связан. но с его помощью да, можно получить ажжресс обьекта |
29.04.2010, 01:00 | #17
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
agentex
offline
Опыт:
34,534Активность: |
и при реф каунт = 0 хендл благополучно уничтожается? |
29.04.2010, 01:09 | #18
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
108,439Активность: |
y
ADOLF добавил: точнее становиться свободным, т.е. теперь можно создать новый обьект с таким же хендлом |
29.04.2010, 01:17 | #19
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
agentex
offline
Опыт:
34,534Активность: |
спасибо за разъяснение :) |
29.04.2010, 01:19 | #20
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|