c++ - Unreal Engine 4. Different ways to instantiate the object - Stack Overflow

객체를 인스턴스화하는 방법을 네 가지 정도 찾았는데, 제가 이해한 것이 명확한지 모르겠습니다.

첫 번째 질문입니다: 이 함수를 한 가지 용도로 사용할 수 있다면 어떤 차이가 있을까요? 언제, 어떻게, 왜 이 함수들을 사용해야 할까요?


이 함수의 차이점을 이해하려면 언리얼 엔진의 오브젝트 모델은 자바스크립트에서와 마찬가지로 오브젝트 프로토타입을 기반으로 한다는 점을 기억해야 합니다. 각 UClass 는 연관된 UObject 클래스의 기본 인스턴스, 즉 Class Default Object(CDO)에 연결되며, 엔진이 초기화될 때 클래스 생성자를 통해 한 번만 먼저 할당된 다음 생성됩니다. CDO는 클래스의 다른 모든 인스턴스가 복사되는 템플릿 역할을 하며, 생성자는 다시 호출되지 않습니다.

즉, 클래스 생성자는 런타임 로직을 포함할 수 없으며, CDO와 해당 프로퍼티를 초기화할 때만 사용해야 합니다. 클래스에 액터 컴포넌트와 같은 서브오브젝트가 포함된 경우, 이 서브오브젝트도 동일한 작업을 수행해야 하므로 자체 기본 오브젝트를 먼저 생성해야 합니다. 그런 다음 오브젝트의 실제 인스턴스화는 엔진이 초기화된 후에 지연되어야 하므로 일반 게임플레이 코드에서 클래스의 새 인스턴스 생성을 요청할 때마다 부모 오브젝트와 모든 서브오브젝트가 각각의 디폴트에서 인스턴스화됩니다.

따라서 오브젝트가 생성될 수 있는 모든 다양한 시나리오를 처리하기 위해서는 오브젝트를 생성하는 여러 가지 방법이 필요합니다.

자세한 내용은 엔진 소스 코드, 특히 CoreUObject 엔진 모듈의 UObject/UObjectGlobal.cpp 및 UObject/UObjectGlobal.h를 확인하는 것이 좋습니다. 내부적으로 이러한 모든 함수는 궁극적으로 (4.24 기준) 실제 오브젝트 생성을 처리하는 StaticConstructObject_Internal을 호출합니다.