인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

starkshn님의 프로필 이미지
starkshn

작성한 질문수

언리얼 엔진4 입문 (C++ 기반)

캐릭터 생성

생성자 ConstructorHelpers질문 있습니다.

작성

·

465

0

APerson::APerson()

{

PrimaryActorTick.bCanEverTick = true;

Body = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("BODY"));

RootComponent = Body;

static ConstructorHelpers::FObjectFinder<UStaticMesh> BODY(TEXT("StaticMesh'/경로 어쩌구'"));

if (BODY.Succeeded())

{

Body->SetStaticMesh(SM_BODY.Object);

}

}

 

이렇게 Person이라는 c++클래스의 생성자에서 FObjectFinder할 때 제일앞에 static을 붙이는데

이게 구글링을 해보니까

경로는 변경될일이 없기 때문에 게임에서 생성자 코드가 여러번 호출 될 때마다 지역변수를 생성하고 초기화 하는 것은 불필요한 작업이라서 static을 붙인다던데...

 

Person이라는 객체가 월드에 동적으로 배치가 된다면 어쨋든 생성자를 호출하기때문에 변경될일이 없더라도 지역변수를 호출하는거 아닌가요...??

static 키워드가 붙은 변수는 생성자에서 초기화를 못한다고 알고있습니다..

 

왜냐하면 같은 이름의 변수가 계속 데이터 영역에 올라가면 링킹 문제가 발생한다고 알고있어서...(정확하지는 않지만 그냥 같은 이름의 변수를 계속 데이터 영역에 올리면 안된다라는 느낌을 강하게 받습니다)

 

그런데 만약 Person이라는 c++객체를 동적으로 계속 월드에 배치를 한다면 생성자도 호출이 되는 것일텐데 그때마다 static이 붙은

 

static ConstructorHelpers::FObjectFinder<UStaticMesh> BODY(TEXT("StaticMesh'/경로 어쩌구'"));

이부분이 계속 호출 되면 에러가 나야 정상아닌가요..?? 잘 모르겠습니다..ㅠ

답변 1

1

Rookiss님의 프로필 이미지
Rookiss
지식공유자

static + local은 일반 지역 변수가 아닌 [정적 지역 변수]
~라서 최초에 한 번만 만들어집니다.
여러 객체들이 동일한 [정적 지역 변수]를 공유해서 사용하게 되는 것은 맞지만
여러 번 만들어지진 않기 때문에 말씀하신 링킹 문제 등은 일어나지 않습니다.

starkshn님의 프로필 이미지
starkshn

작성한 질문수

질문하기