스레드 안정성
기본적으로 스마트 포인터는 싱글 스레드가 접근하는 것이 안전합니다. 멀티 스레드가 접근해야 한다면 스마트 포인터 클래스의 스레드 세이프 버전을 사용하세요:
- TSharedPtr<T, ESPMode::ThreadSafe>
- TSharedRef<T, ESPMode::ThreadSafe>
- TWeakPtr<T, ESPMode::ThreadSafe>
- TSharedFromThis<T, ESPMode::ThreadSafe>
이러한 스레드 세이프 버전은 원자적(atomic) 참조 카운팅으로 인해 디폴트보다 다소 느리지만 그 비헤이비어는 일반 C++ 포인터와 같습니다:
- 읽기와 복사본은 항상 스레드 세이프입니다.
- 안전성을 위해 쓰기와 초기화는 반드시 동기화되어야 합니다.
하나 이상의 스레드가 포인터에 접근하지 않는다는 것이 확실하다면, 스레드 세이프 버전을 사용하지 않음으로써 퍼포먼스를 향상시킬 수 있습니다.
팁 및 제한사항
- 가급적이면 함수에 데이터를 TSharedRef 또는 TSharedPtr 매개변수로 넣지 않는 것을 권장합니다. 이러한 데이터의 해제와 참조 카운팅으로 인해 오버헤드가 발생하게 됩니다. 그 대안으로, 레퍼런스된 오브젝트를 ‘const &'로 넣으세요. (즉 읽기로만 사용 할때를 말하는 것)
- 쉐어드 포인터를 불완전한 타입/형식으로 미리 선언할 수 있습니
- 쉐어드 포인터는 언리얼 오브젝트(UObject 와 이로부터 파생된 클래스)와 호환되지 않습니다. 언리얼 엔진은 ‘UObject' 관리를 위한 별도의 메모리 관리 시스템이 있으며 (언리얼 오브젝트 처리 문서를 참고하세요) 두 시스템은 완전히 다른 시스템입니다
반응형
'게임엔진(GameEngine) > Unreal4' 카테고리의 다른 글
Damage in Unreal Engine 1: Introduction (Instigator, Causer) (0) | 2023.03.05 |
---|---|
애니메이션 디스턴스매칭 (0) | 2023.02.20 |
Widget for painting (0) | 2022.11.23 |
JNI Data Type Mapping to C/C++ (0) | 2022.10.07 |
Android 에서 Java -> 호출 (0) | 2022.10.06 |