> For the complete documentation index, see [llms.txt](https://nexon3333.gitbook.io/gga/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://nexon3333.gitbook.io/gga/podrobno-o-delegatakh-ue.md).

# Подробно о делегатах UE

Есть 2 основных вида делегатов:

**Dynamic** - они используют сереализаю (сохронение в файл\загрузку). Они нужны для булпринтов. Для этого и нужна сиреализация, чтобы загружать булпринт. Для этого и нужно указывать UFUNCTION() Non dynamic - все что не исопльзуют динамик. У них свой класс. могут быть мульткаст и нет. Использовать можно в обычных коде, даже там где не UObject -ы

Dynamic - все является WeakPtr типа, т.е они безопасны и вызовутся только если обьект с котором они асоциированны (this) будет валиден.

**Non dynamic** бывают 4 видов:&#x20;

1. Raw - они принимают this в виде обычной ссылке, без какой либо проверки и защиты. Работает с чем угодно, полезно для сеард парт библиотек Weak - используются
2. TWeakObjectPtr - могут работать только UObject, хранят в себя ссылку на обьект и проверяет его перед использованием. Бывает 3 видов:&#x20;
   1. UObject - сохроняет ссылку на зыс обьект и имя функции) WeakLambda - сохроняет ссылку на лябду, но если лямда вызывает функции, то тоже нужна this которую тоже нужно обезопасить)
   2. &#x20;UFunction - берет ссылку на зас и имя (текстом) функции и берет ее сигнатуру, полезно когда она протектед )
   3. &#x20;SP - шеред поинтер. Хранит обьект от гарбедж колектора, пока существуют шеред поинтеры. Работает и не с UObject ами, но по факту бесмыслена, если обьект должен был быть уже удален,а мы будем его хранить чтобы вызвать лямбду
3. &#x20;Static -вызывает просто статическую или глобальную функцию.

Теперь про манипуляции:

1. &#x20;Add - используется в мультикаст делегатов. Их же много, вот мы и добавляем.
2. &#x20;Create - используется в не-мультикаст делегатах. Если мы берем просто класс делеката FDelegate::Create - то можем создать экземпляр делегата, через который будем потом вызывать Unbind и все такое Bind - используется в не-мультикаст делегатах.&#x20;
3. Если у нас уже есть экземпляр делегата MyDelegate.Bind - то к нему мы уже добавляем чо хотим и через него же потом вызываем что хотим.
