본문 바로가기
Unreal

UObject를 상속 받지 않는 커스텀 클래스의 메모리 관리

by myroad 2022. 12. 19.

UObject을 상속 받지 않은 커스텀 클래스는 TSharedPtr나 TWeakPtr을 사용해서 개체의 참조가 0이 될때 메모리을 해지하는 방법으로 메모리을 관리한다.

class PlayerCharacter {};

TSharedPtr<PlayerCharacter> PlayerChar (new PlayerCharacter());

TWeakPtr<PlayerCharacter> PlayerChar (new PlayerCharacter());

TSharedPtr은 공유 포인터이고 TWeakPtr은 약한 포인터이다.

참조 카운트가 0이 되어도 개체의 메모리을 해지 안되게 하는 기능의 유무 차이

TSharedPtr - 참조 카운트가 0이 되어도 메모리에 개체을 계속 유지시키는 옵션 기능이 있다.

TWeakPtr - 참조 카운트가 0이 되어도 메모리에 개체을 계속 유지시켜주는 옵션 기능이 없다.

 

스레드로 부터 안정성 유무 차이

TSharedPtr - 스레드로 부터 안전하다. 따라서 별도의 스레드로가 이 포인터을 안전하게 조작할 수 있다는 의미이다.

TWeakPtr - 스레드로 부터 안전하지 않다.

 

UObject을 상속받은 클래스들은 TSharedPtr나 TWeakPtr을 사용할 수 없고 커스텀 클래스들만 사용 가능하다.