본문 바로가기
Unreal/Solution

Unreal C++ 생성자 사용시 주의할 점

by Dev_카페인 2023. 12. 16.
반응형

[Unreal/C++] 생성자 사용시 주의할 점

 

UObject 에는 4개의 생성자가 있습니다.

 

아무 것도 받지 않는 기본 생성자

FObjectInitializer&를 받는 생성자

EStaticConstructor, EObjectFlags 를 받는 생성자

FVTableHelper&를 받는 생성자

 

UObject를 상속받는 Actor - Pawn - Character 등도 생성자를 만들게 되면 부모의 생성자를 확인하고 호출해 줘야 합니다.

// UObject.h 생성자 일부

/** Default constructor */
UObject();

/** 
 *  Constructor that takes an ObjectInitializer. 
 *  Typically not needed, but can be useful for class hierarchies that support
 *  optional subobjects or subobject class overriding
 */
UObject(const FObjectInitializer& ObjectInitializer);

/** DO NOT USE. This constructor is for internal usage only for statically-created objects. */
UObject(EStaticConstructor, EObjectFlags InFlags);

/** DO NOT USE. This constructor is for internal usage only for hot-reload purposes. */
UObject(FVTableHelper& Helper);

 

기본 생성자를 제외한 3개의 생성자의 설명을 읽어보면 다음과 같습니다.

UObject(const FObjectInitializer& ObjectInitializer);
* 일반적으로 필요하지 않습니다.
* 이 생성자를 지원하는 하위 객체나 클래스에서 유용할 수 있습니다.
UObject(EStaticConstructor, EObjectFlags InFlags);
* 사용하지 마십시오.
* 이 생성자는 정적으로 생성된 개체에 대해 내부에서 사용됩니다.
UObject(FVTableHelper& Helper);
* 사용하지 마십시오.
* 이 생성자는 핫리로드를 위해 내부에서 사용됩니다.

 

사용하지 않는 생성자를 제외하면 기본 생성자와 FObjectInitializer를 가지고 있는 생성자만 사용됩니다.

Actor와 Character 클래스에서는 FObjectInitializer를 가지고 있는 생성자가 호출됩니다.

 

생성자가 필요할 때에는 부모 클래스를 살펴보고 작성합니다.

아래는 캐릭터를 상속받는 MyCharacter의 생성자 예시입니다.

// MyCharacter.h
MyCharacter(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get());

// MyCharacter.cpp
MyCharacter::MyCharacter(const FObjectInitializer& ObjectInitializer)
	: Super(ObjectInitializer)
{
	// 초기화 구현
}

 

반응형