정체불명의 모모
언리얼_스마트 포인터(TUniquePtr/ TSharedPtr / TWeakPtr) 본문
언리얼 엔진에서 스마트 포인터
1. 일반 포인터
생성 : new 해제 : delete
키워드를 통해서 생성과 해제를 한다.
2. 유니크 포인터(TUniquePtr)
정의 : 고유 소유권을 가지는 포인터
고유 포인터 객체를 명시적으로 소유한다.
주어진 리소스에 하나의 고유포인터고 소유권이 존재하는데, 고유 포인터는 소유권을
이전 할 수 있지만, 공유를 할 수 없다.
고유포인터는 객체에 소유권을 벗어나거나 없어지면, 자동으로 소멸한다.
생성 : TUniquePtr<FString> myString = TUniquePtr<FString>();
소유권을 넘겨 줄때 : TUniquePtr<FString> youString = MoveTemp(myString);
3. 공유 포인터 (TSharedPtr)
정의 : 침범형(non-intrusive), 레퍼런스가 카운팅 되는 편리한 유형의 스마트 포인터
공유포인터는 객체를 참조하며, 삭제를 방치 하다가, 더이상 공유 포인터 또는 공유
레퍼런스가 없을때(참조 카운트가 0)일때 삭제 된다.
공유포인터가 비었다는 건, 참조하는 객체가 없을 수 있다.(값이 없을 수 도 있음)
null이 아닌 공유포인터는 참조하는 객체에 대한 공유레퍼런스를 생성 있다.
생성 : TSharedPtr<FString> mySharedString = MakeShareable();
공유 포인터의 문제점 : 공유 포인터는 남에게도 공유가 가능하다.
그런데 만약에 서로 공유(참조)하게 된다면?
스코프를 벗어나도 값들이 서로룰 여전히 참조하고 있다.
소유권을 포기하니깐 쓰레기 값이 나온다. <- 여기서 도움이 되는게 약 포인터이다.
4. 약포인터(TWeakPtr) 사용
정의 : 약포인터는 공유 포인터랑 유사하다.
그러나 참조한 객체를 소유하지 않으므로 , 리라프사이클(액터 생명주기)에 영향을 주지 않는다.
약포인터는 레퍼런스 사이클이 없어졌을때, 경고 없이 NULL이 될 수 있어서 유용할 수 있다.
이런 이유는 약포인터는 객체에 대한 공유포인터를 생성하고, 개체에 안전하게 접근 할 수 있게한다.
생성 : TWeakPtr<FString> weakString;
'프로그래밍(c++) > 언리얼엔진' 카테고리의 다른 글
[언리얼엔진] GameFramework 알아보기(중요한 것) (0) | 2021.07.15 |
---|---|
[내가 보려고] 언리얼엔진 Actor 라이프 사이클 (0) | 2021.06.09 |
언리얼_UCLASS , UPROPERTY (4) | 2021.06.01 |