You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
56 lines
3.0 KiB
Plaintext
56 lines
3.0 KiB
Plaintext
INTSourceChangelist:2374181
|
|
Availability:Public
|
|
Title:공유 레퍼런스
|
|
Crumbs:%ROOT%, Programming, Programming/UnrealArchitecture/SmartPointerLibrary
|
|
Description:초기화되지 않거나(uninitialized) null 할당 불가능한 스마트 포인터 유형입니다.
|
|
Version: 4.5
|
|
|
|
[TOC(start:2)]
|
|
|
|
**공유 레퍼런스** (shared reference) 는 null 가능하지 않은 공유 포인터입니다. 즉 빈 공유 레퍼런스를 생성하거나 공유 레퍼런스에 null 을 할당할 수 없는 포인터로, 오브젝트에 안전하게 접근할 수 있으니 안전하고 깨끗한 코드 작성에 도움이 됩니다. 사실 공유 레퍼런스는 항상 유효하기 때문에 공유 포인터와는 달리 `IsValid()` 메소드조차 없습니다. 가급적 공유 포인터 대신 항상 공유 레퍼런스를 사용할 것을 추천합니다.
|
|
|
|
비어 있거나 null 가능한 레퍼런스가 필요하다면 [](Programming/UnrealArchitecture/SmartPointerLibrary/SharedPointer) 를 대신 사용해야 할 것입니다.
|
|
|
|
## 선언과 초기화
|
|
|
|
공유 레퍼런스는 항상 유효한 오브젝트로 초기화(initialize)되며, 초기화되지 않고서는 선언(declare)도 불가능합니다.
|
|
|
|
새 공유 레퍼런스 생성 예제:
|
|
|
|
// Create a shared reference to a new node 새 노드로의 공유 레퍼런스 생성
|
|
TSharedRef<FTreeNode> NodeRef( new FTreeNode() );
|
|
|
|
초기화나 NULL 을 할당하지 않고 공유 레퍼런스를 선언하려 한다니, 경을 칠 노릇입니다!:
|
|
|
|
TSharedRef<UBool> EmptyBool; // 컴파일 아니되오!!
|
|
|
|
## 공유 레퍼런스 사용법
|
|
|
|
대부분의 경우에 있어 공유 레퍼런스 사용법은 공유 포인터 사용법과 똑같습니다.
|
|
|
|
// Create a shared reference to a new node 새 노드로의 공유 레퍼런스 생성
|
|
TSharedRef<FTreeNode> NodeRef( new FTreeNode() );
|
|
|
|
NodeRef->ListChildren();
|
|
( *NodeRef ).ListChildren();
|
|
const FTreeNode& NodeVar = NodeRef.Get();
|
|
|
|
다시금, 중요한 차이점은 공유 포인터는 NULL 로 설정할 수 없습니다:
|
|
|
|
TSharedRef<FTreeNode> Node = NULL; // 컴파일 아니되오!!
|
|
|
|
### 포인터와 레퍼런스 변환
|
|
|
|
공유 레퍼런스는 공유 포인터로 묵시적 변환되므로, 항상 레퍼런스에서 포인터를 만드는 것이 안전합니다. 예로 공유 레퍼런스를 공유 포인터에 할당하거나, 공유 포인터를 바라는 메소드에 공유 레퍼런스를 전해줄 수 있습니다.
|
|
|
|
TSharedPtr<FTreeNode> SomeNodePtr = NodeRef;
|
|
|
|
그러나 포인터에서의 변환은 안전하지 않을 수가 있기에, `ToSharedRef()` 함수를 사용하여 명시적 변환을 강제로 해 줘야 합니다.
|
|
|
|
// Explicitly reference a pointer. Will assert if the pointer is not valid! 포인터를 명시적으로 가리킵니다. 포인터가 무효하면 assert 가 발생합니다!
|
|
NodeRef = SomeNodePtr.ToSharedRef();
|
|
|
|
[REGION:note]
|
|
비슷한 방식으로 C++ 포인터를 가진 `*` 연산자에 대해서도, `ToSharedRef()` 를 사용하면 오브젝트가 유효하지 않은 경우 assert 가 발생합니다.
|
|
[/REGION]
|