일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 팰린드롬 만들기
- 티스토리챌린지
- const
- 오블완
- softeer
- Programmers
- RootMotion
- 줄 세우기
- baekjoon
- NRVO
- 백준
- 1563
- Unreal Engine5
- UnrealEngine5
- UnrealEngine4
- C
- 언리얼엔진5
- 프로그래머스
- 2294
- UE5
- DeferredRendering
- DirectX11
- RVO
- GeeksForGeeks
- Frustum
- winapi
- IFileDialog
- directx
- algorithm
- C++
- Today
- Total
목록유효성 검사 (2)
Game Develop
언리얼 유효성검사하다보면, 막 배우는 사람들입장에서는 헷갈리는 부분들이 있다. 뭔 로우포인터쓰면 nullptr이 대입안되서 위험하고.. UPROPERTY쓰면 어쩌고 저쩌고.... 다른 기준으로 좀 이해하기 편하게 쓰자면, 어떠한 액터의 Destroy()를 호출했을때를 기준으로 생각하는것도 괜찮다. 일단 UPROPERTY()가 명시된 액터의 경우, Destroy를 호출한 다음 GC가 호출되기 이전, 이후는 다음과 같다. 이전 : 여전히 기존의 메모리를 가르킴. 이후 : 변수에 nullptr대입 즉, 만약 Destroy 호출 후에 GC가 호출되기 이전에 그저 해당 유효성검사를 nullptr로 한다면 개발자가 의도하지않은 동작이 일어날 수 있다는 의미이다. 어쨌든 Destroy를 호출했다는 것은 해당 호출 이..
본인이 직접 작성한 코드에 대한 포인터는 UPROPERTY 매크로를 붙여서 관리하게 하자. -> 잘못하면 런타임때 죽어버릴 수 있다. 월드상에 배치되는 액터라면 IsValid()함수로 유효성 체크를 한다. 언리얼오브젝트는 Destroy를 호출한다고 바로 삭제되는게 아니라, 일단 Pending Kill 상태로 마크만 표시한 후, 다음 가비지컬렉터가 작동할 때 되서야 실제로 삭제된다. 네이티브 c++ 개발할 때처럼 nullptr로만 체크를 하는것을 권장하지 않는다. UPROPERTY가 런타임때 죽는다면, 가비지컬렉터가 UObject에서 상속되는 클래스를 지워서 그렇다. 스마트포인터로 관리하거나, AddReference로 GC에 참조카운트를 올려서 관리받게 유도한다. Actor클래스의 경우 SpawnActor..