매니저가 어떤 자원을 shared_ptr로 소유하고 있는데
이걸 누가 가져가서 확인만 하고싶음
그래서 매니저에서 shared_ptr을 weak_ptr로 들고갔음
근데 들고온 weak_ptr을 다시 사용하려면 weak_ptr::lock을 호출해서 실제로 이게 자원이 살아있는지 확인해야 하잖아?
근데 weak_ptr::lock이 너무 느림
이러면 애초부터 weak_ptr로 들고오는게 잘못이야 아니면 뭔가 다른 문제가 있나?
근데 또 다시 생각해보면 매니저에서 ReadOnly 자원들을 unique_ptr로 들고있어야 말이 맞는 것 같은데
근데 그럼 함수로 레퍼런스로 넘겨서 확인할 순 있지만, 이걸 따로 저장해둘순 없잖아
그럼 어케하누 ㅆㅂ
근데 또 찾아보니깐 observer_ptr이라는게 있는데 한번 찾아봐야겠음
아 걍 이거는 로우 포인터네
포인터 내부의 기능에 의존하지 말고 그냥 매니저에다가 살아있는지 죽었는지 플래그를 달아. 글고 반드시 shared_ptr 을 써야되는거야? 매니저가 따로 있으면 라이프 사이클도 매니저가 관리하면 되지 shared_ptr 은 아무도 책임지려는 놈이 없을 때 쓰는거야 - return 0;
shared_ptr로 복사해서 가져가거나 weak_ptr로 가져가서 나중에 lock으로 확인할때 다 refcount atomic연산함. 그게 성능상에 문제가있으면 raw_ptr로 가져가야지 뭐
하도 로우 포인터 사용하지 말고 스마트 포인터를 사용하라길래 좀 사용해보고 싶었는데 어렵누 자원은 매니저가 가지고있고 이걸 다른 애들이 읽기만 하는 상황인데 뭔가 그냥 수정은 안하고 들고만 있는것도 하고싶어서 이것저것 찾아보고 있던거임 unique_ptr은 들고 있을 수 없고, lock은 너무 비싸서 그냥 로우포인터로 다 돌려야겠음 ㄳㄳ
살아있는지 죽어있는지도 그냥 nullptr인지 확인만 하면 되는거라 그냥 공부용이였음
매니저에서 unique_ptr로 들고 있다가 다른 곳에서 요청하면 get으로 raw ptr 구해서 걍 넘겨주셈 대신 이렇게 넘겨주면 댕글링 되지 않게 딜리트 안한다는걸 보장하고 자원이 더 이상 쓸모 없어지면 알아서 지워질거임
알아서 지워진다는건 만약 컨테이너에 담고 있거나 할 경우 컨테이너에서 그 요소를 지워주거나 하면 될 듯
매니저 외의 부분에 delete가 되지 않는다는걸 보장하려면 const ptr로 넘겨주셈
const 포인터는 delete 가 안되나요? 아니면 그냥 프로그래머끼리 약속인가요
윗놈말대로 매니저가 소유권을 가지고 있으니까 매니저에서 살았는지 죽었는지 알려줘야지 억지로 나누니까 이상해진거