2012-11-12 2 views
9

weak_ptr이 유효한 개체를 가리키는 지보기 위해 임시 shared_ptr을 만들어야하는 것이 비효율적 인 것처럼 보입니다. 나는 심지어 그 물건에 접근하기를 원하지 않는다. 이것은 shared_ptr의 벡터에서 weak_ptr을 반환하는 함수가 있고 빈 weak_ptr을 반환하면 객체가 해당 GUID와 함께 존재하지 않는다는 것을 의미하기 때문입니다.유효한 객체를 가리키는 지 테스트하기 위해서 weak_ptr.lock()을 사용해야합니까?

개체가 있는지 테스트하고 있습니다.

shared_ptr을 만들지 않고 weak_ptr이 비어 있거나 비어 있지 않은지 확인하는 다른 방법이 있습니까?

+0

lock()을 사용할 수 있습니다. – imreal

+0

먼저 약 포인터를 어떻게 얻었습니까? _ 변경해야 할 인터페이스입니다. –

+1

lock()은 shared_ptr을 반환하기 때문에이 게시물을 만들었습니다. – EddieV223

답변

20

expired() 멤버 함수를 사용할 수 있습니다.

+1

'use_count'도 있습니다. – Pubby

+4

@Pubby : if (someVecor.size() == 0)를 통해'if (someVector.empty())'를 사용하는 것이 더 좋습니다. 이 경우 나는 '만료'를 선호하는 이유와 동일합니다. 더 명시적인 –

+0

Microsoft 특정 기능이나 질문이 아니라면 Microsoft 설명서를 사용하는 것을 싫어합니다. 더 나은 http://en.cppreference.com/w/cpp/memory/weak_ptr/expired가 될 것입니다. –