반응형
SessionSearch = MakeShareable(new FOnlineSessionSearch());
OnlineSessionInterface->FindSessions(*LocalPlayer->GetPreferredUniqueNetId(), SessionSearch.ToSharedRef());
스마트 포인터(TSharedPtr)의 역할
스마트 포인터는 자신이 관리하는 객체가 몇 군데에서 사용되고 있는지 항상 개수를 셉니다. (이를 '참조 카운팅'이라고 합니다)
- MakeShareable로 SessionSearch를 만들면, 참조 카운트는 1이 됩니다.
- OnlineSessionInterface->FindSessions(...) 함수에 이 SessionSearch를 전달하면, 온라인 시스템도 이 객체를 사용하게 되므로 참조 카운트는 2가 됩니다.
- FindSessions 함수가 끝나면, 지역 변수로서의 SessionSearch는 사라지므로 참조 카운트는 다시 1이 됩니다.
- 하지만 참조 카운트가 아직 0이 아니기 때문에, '세션 검색 조건' 객체는 메모리에서 사라지지 않고 계속 살아남습니다.
- 이후 백그라운드에서 검색 작업이 완전히 끝나면, 온라인 시스템이 "나 이제 다 썼어"라고 알려주고 참조 카운트는 마침내 0이 됩니다. 이때 비로소 객체는 메모리에서 안전하게 제거됩니다.
반응형