Всем привет. В чем разница между .create () и .allocate ()? И тот и дургой метод возвращают структуру но чемо ни отличаются немонятнл

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

allocate() используется внутри статичного метода и возвращает лишь индекс новой структуры
Технически верно, но на практике использовать .allocate() есть смысл только при перегрузке .create() (равно как и .deallocate() только при перегрузке .destroy()). Собственно, согласно документации, для того эти методы и существуют.
0
15
7 лет назад
Отредактирован EnergyFrost
0
хз. Напиши элементарную структуру. Создай сначала через create, потом через allocate и посмотри, во что это компилируется. Заодно мне скажешь )
0
10
7 лет назад
0
это одно и тоже
3
26
7 лет назад
Отредактирован Hate
3
.create() создает структуру и задает изначальные значения прописанные в структуре, allocate() используется внутри статичного метода и возвращает лишь индекс новой структуры
	struct A
        real a = 5.
    endstruct
    
    
    struct B
        real a = 5.
		real b = 10.
            
            static method new takes nothing returns thistype
                thistype this = thistype.allocate()
                    set this.a = 7.
                return this
            endmethod
                
    endstruct
если обратиться к переменной а в структуре А или B после create(), то там будет лежать 5., если же создать структуру B через new() то в а будет лежать 7., а b будет не заданная.
используя статичный метод создания структуры, можно передавать различные данные, которые затем присвоить переменным внутри структуры
			static method new takes real angle returns thistype
                thistype this = thistype.allocate()
                    set this.a = angle
                return this
            endmethod

...
local B new_struct = B.new(GetUnitFacingAngle(GetTriggerUnit()))
0
17
7 лет назад
0
allocate выделяет индекс структуры и возвращает его.
Если парсер наткнется на вызов метода create, он проверит наличие в этой структуре метода create, если такого нет, будет вызван метод allocate вместо create.
1
30
7 лет назад
1
allocate() используется внутри статичного метода и возвращает лишь индекс новой структуры
Технически верно, но на практике использовать .allocate() есть смысл только при перегрузке .create() (равно как и .deallocate() только при перегрузке .destroy()). Собственно, согласно документации, для того эти методы и существуют.
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.