есть одна функция
function CreateUnit_Mage takes player id, integer unitid, real x, real y, real face returns unit
local unit u=null
set u=CreateUnit(id,unitid,x,y,face)
call UnitAddAbility(u,'AHbz')
call UnitAddAbility(u,'AHwe')
return u
set u=null
endfunction
как занулить переменную u ?
после return это сделать не получится, т.к. идёт выход из функции
до return если занулить, тогда и возвращать будет нечего
а если не занулять, то получится утечка
а если без переменной u, то не получится добавить абилку
а если вместо локальной использовать глобальную, то ходят слухи, что это утечка - слух1 - слух2
после return это сделать не получится, т.к. идёт выход из функции
до return если занулить, тогда и возвращать будет нечего
а если не занулять, то получится утечка
а если без переменной u, то не получится добавить абилку
а если вместо локальной использовать глобальную, то ходят слухи, что это утечка - слух1 - слух2
или вариант решения только 1?:
- делать на глобалке
- после каждого вызова CreateUnit_Mage обнулять эту глобалку сразу после функции?
или вариант 2 это добавить обнуление глобалки перед назначением ей юнита внутри функции?
set global_u=null
set global_u=CreateUnit(id,unitid,x,y,face)
но в примере на тхехелпере заявлено, что такая конструкция утекает: (обнуление глобалки перед её переназначением)
set G1=null
set G1=CreateGroup()
Принятый ответ
Главное запомнить что аргументы не текут. Но созданные объекты удалять всё же нужно.
Глобалка
function CreateUnit_Mage takes player id, integer unitid, real x, real y, real face returns unit
set bj_lastCreatedUnit = CreateUnit(id, unitid, x, y, face)
call UnitAddAbility(bj_lastCreatedUnit, 'AHbz')
call UnitAddAbility(bj_lastCreatedUnit, 'AHwe')
return bj_lastCreatedUnit
endfunction
Дополнительная функция
function CreateUnit_Mage_Helper takes unit u returns unit
call UnitAddAbility(u, 'AHbz')
call UnitAddAbility(u, 'AHwe')
return u
endfunction
function CreateUnit_Mage takes player id, integer unitid, real x, real y, real face returns unit
return CreateUnit_Mage_Helper(CreateUnit(id, unitid, x, y, face))
endfunction
Дополнительный аргумент
function CreateUnit_Mage takes player id, unit u, integer unitid, real x, real y, real face returns unit
set u = CreateUnit(id, unitid, x, y, face)
call UnitAddAbility(bj_lastCreatedUnit, 'AHbz')
call UnitAddAbility(bj_lastCreatedUnit, 'AHwe')
return u
endfunction
call CreateUnit_Mage(Player(0), null, 'hfoo', 0,0,0) // пример вызова
такое зануление должно быть базой
Не использование локалок для хэндлов должно быть базой.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Ред. host_pi
а что, краши и тормоза по нехватке памяти - лучше?
такое зануление должно быть базой
Глобалка
Дополнительная функция
Дополнительный аргумент