Функции UE4

!TODO!

```
template< class T >
T *ConstructObject(
       UClass                 *Class,
       UObject                *Outer                            = (UObject*) GetTransientPackage(),
       FName                   Name                             = NAME_None,
       EObjectFlags            SetFlags                         = RF_NoFlags,
       UObject                *Template                         = NULL,
       bool                    bCopyTransientsFromClassDefaults = false,
       FObjectInstancingGraph *InstanceGraph                    = NULL)

```

Эта шаблонная функция объявлена устаревшей, начиная с версии UE 4.8. Вместо неё следует использовать функцию NewObject.

### GetFullNameSafe

Определена в файле UObjectBaseUtility.

```
FString  GetFullNameSafe(
             const UObjectBaseUtility *Object)

```

Параметры:

* Object — объект, чьё имя надо получить.

Эта функция безопасным образом возвращает имя заданного объекта. Безопасность заключается в том, что она проверяет, не передан ли ей нулевой указатель и задан ли класс для указанного объекта. В обоих этих случаях возвращается строка "None", и лишь в случае, если параметр Object отличен от нуля и для него задан класс, вызывается соответствующий метод GetFullName.

### GetTransientPackage

Определена в файле UObjectGlobals.

```
UPackage *GetTransientPackage()

```

!TODO!

### HashObject

Определена в файле UObjectHash.

!TODO!

### MarkObject

Определена в файле UObjectMarks.

!TODO!

### NewNamedObject

Определена в файле UObjectGlobals.

```
template< class TClass >
TClass *NewNamedObject(
            UObject      *Outer,
            FName         Name,
            EObjectFlags  Flags    = RF_NoFlags,
            UObject      *Template = NULL)

```

Эта функция, предназначенная для создания экземпляров объектов заданного типа, объявлена устаревшей, начиная с версии 4.8. Вместо неё следует использовать функцию NewObject.

### NewObject

Определена в файле UObjectGlobals.

```
template< class T >
T* NewObject(
       UObject                *Outer                            = (UObject*) GetTransientPackage(),
       UClass                 *Class                            = T::StaticClass(),
       FName                   Name                             = NAME_None,
       EObjectFlags            Flags                            = RF_NoFlags,
       UObject                *Template                         = nullptr,
       bool                    bCopyTransientsFromClassDefaults = false,
       FObjectInstancingGraph *InInstanceGraph                  = nullptr)

```

```
template< class T >
T* NewObject(
       UObject                *Outer,
       FName                   Name,
       EObjectFlags            Flags                            = RF_NoFlags,
       UObject                *Template                         = nullptr,
       bool                    bCopyTransientsFromClassDefaults = false,
       FObjectInstancingGraph *InInstanceGraph                  = nullptr)

```

Параметры:

* T — тип создаваемого объекта;
* Outer — объект-хозяин создаваемого объекта;
* Class — класс создаваемого объекта. Вторая форма функции автоматически использует класс, соответствующий типу объекта; для первой функции может быть явно задан другой класс, но он обязательно должен быть потомком класса, соответствующего типу объекта;
* Name — имя создаваемого объекта. Не допускается задавать пустое имя, если эта функция вызывается из конструктора объекта-хозяина (т.е. функция не может использоваться для создания подобъектов по умолчанию);
* Flags — флаги создаваемого объекта;
* Template — объект, который должен использоваться в качестве шаблона при создании нового объекта;
* bCopyTransientsFromClassDefaults — если равен true, указывает, что значения переходных (transient) свойств необходимо копировать из CDO, а не указанного архетипа;
* InInstanceGraph — указатель на структуру, содержащую отображение созданных компонентов и объектов на их шаблоны; используется для создания компонентов, которыми владеет новый объект.

Эти шаблонные функции предназначены для создания нового экземпляра объекта заданного типа T. Основную часть работы для них выполняет внутренняя функция StaticConstructObject\_Internal.

### ObjectHasAllMarks

Определена в файле UObjectMarks.

!TODO!

### ObjectHasAnyMarks

Определена в файле UObjectMarks.

!TODO!

### StaticConstructObject

Определена в файле UObjectGlobals.

```
UObject *StaticConstructObject(
             UClass                 *Class,
             UObject                *InOuter                          = (UObject*) GetTransientPackage(),
             FName                   Name                             = NAME_None,
             EObjectFlags            SetFlags                         = RF_NoFlags,
             UObject                *Template                         = NULL,
             bool                    bCopyTransientsFromClassDefaults = false,
             FObjectInstancingGraph *InstanceGraph                    = NULL)

```

Эта функция объявлена устаревшей; вместо неё следует использовать NewObject, а внутренний код модуля CoreUObject должен пользоваться функцией StaticConstructObject\_Internal.

### StaticConstructObject\_Internal

Определена в файле UObjectGlobals.

```
UObject*  StaticConstructObject_Internal(
             UClass                 *Class,
             UObject                *Outer                            = (UObject*) GetTransientPackage(),
             FName                   Name                             = NAME_None,
             EObjectFlags            SetFlags                         = RF_NoFlags,
             UObject                *Template                         = NULL,
             bool                    bCopyTransientsFromClassDefaults = false,
             FObjectInstancingGraph *InstanceGraph                    = NULL)

```

Параметры:

* Class — класс создаваемого объекта;
* Outer — хозяин данного объекта (объект, внутри которого будет находиться создаваемый объект);
* Name — имя создаваемого объекта. Если не задано, будет автоматически создано уникальное имя вида "ClassName\_#";
* SetFlags — набор флагов, описывающих создаваемый объект;
* Template — объект-архетип для данного объекта. Если задан, в новом объекте будет сохранена ссылка на этот объект как на архетип, а свойства нового объекта будут скопированы из объекта-архетипа. Если же архетип не задан, копирование свойств будет выполнено из CDO. Если задан, архетип должен принадлежать к тому же классу, что и создаваемый объект, или к классу-потомку, либо он должен быть CDO;
* bCopyTransientsFromClassDefaults — если этот параметр равен true, временные свойства будут скопированы из CDO, а не объекта-архетипа;
* InstanceGraph — указатель на структуру, задающую отображение созданных объектов и компонентов на их шаблоны.

Эта подпрограмма предназначена для использования внутри модуля CoreUObject. Она создаёт новый экземпляр объекта и обеспечивает его полную инициализацию, включая, как правило, создание компонентов объекта. Однако если в параметре SetFlags присутствует флаг RF\_NeedsLoad (он указывает, что объект по-прежнему нуждается в загрузке своих данных с диска), компоненты объекта не будут создаваться во время его создания (вместо этого они будут созданы при выполнении метода PostLoad).

Собственно создание объекта выполняется подпрограммой StaticAllocateObject, а подобъекты нового объекта при необходимости создаются вызовом конструктора класса, адрес которого находится в поле Class::ClassConstructor.

При компиляции со сбором статистики общее время выполнения этой функции учитывается как STAT\_ConstructObject.

### StaticLoadClass

```
UClass *StaticLoadClass(
        UClass      *BaseClass,
        UObject     *InOuter,
        const TCHAR *Name,
        const TCHAR *Filename  = NULL,
        uint32       LoadFlags = LOAD_None,
        UPackageMap *Sandbox   = NULL);

```

### StaticLoadObject

```
UObject *StaticLoadObject(
        UClass      *Class,
        UObject     *InOuter,
        const TCHAR *Name,
        const TCHAR *Filename                   = NULL,
        uint32       LoadFlags                  = LOAD_None,
        UPackageMap *Sandbox                    = NULL,
        bool         bAllowObjectReconciliation = true);

```

Поиск и загрузка объекта, заданного именем.

Параметры:

* ObjectClass — класс искомого объекта;
* InOuter — необязательный объект-«хозяин», определяющий, где выполнять поиск объекта;
* InName — имя искомого объекта. Если не задано полностью, необходимо указать параметр InOuter или Filename;
* Filename — необязательное имя файла, из которого должен быть загружен объект;
* LoadFlags — флаги, управляющие загрузкой объекта;
* Sandbox — список пакетов, ограничивающих поиск объекта;
* bAllowObjectReconciliation — разрешено ли искать объект с помощью FindObject.

Возвращается указатель на загруженный объект. Если объект не был найден, возвращается nullptr.

### UnhashObject

Определена в файле UObjectHash.

!TODO!

### UnMarkObject

Определена в файле UObjectMarks.

!TODO!

### DebugIsClassChildOf\_Internal

Определена в файле UObjectGlobals.

```
COREUOBJECT_API bool  DebugIsClassChildOf_Internal(
        UClass  *Parent,
        UClass  *Child);

```

Возвращает true, если класс *Child* является потомком класса *Parent*, и false в противном случае.

### UObjectInitialized

Определена в файле UObjectBase.

```
bool  UObjectInitialized()

```

Эта функция возвращает true, если система объектов уже инициализирована, и false в противном случае.