:만료 된 weak_ptr과 초기화되지 않은 weak_ptr을 구별 할 수 있습니까? 예
std::weak_ptr<int> wp1(std::make_shared<int>());
std::weak_ptr<int> wp2;
assert(PointsToValidOrExpiredObject(wp1));
assert(!PointsToValidOrExpiredObject(wp2));
이러한 기능 가능한가?
사용 사례 : 클래스의 생성자는 std::weak_ptr<Foo>
을 종속으로 사용합니다. 만료 된 객체를 전달하는 것은 괜찮습니다 (특정 워크 플로에서 발생할 수 있음). 그러나 null을 전달하면 프로그래머가 무언가를 잊어 버린 것을 의미합니다. 이것을 생성자의 매개 변수 유효성 검사의 일부로 테스트하고 싶습니다.
['expired()'] (http://en.cppreference.com/w/cpp/memory/weak_ptr/expired) 메소드를 살펴 보았습니까? – Borgleader
@ 보글 리더. 예 - 불행히도 두 경우 모두 true를 반환합니다. – dlf
대답이있는 것처럼 보일 수도 있지만 덜 비약적 인 해결책은 비어 있지 않은 공유 포인터로만 구성 할 수있는 유형의 약한 포인터를 래핑하고 미처리 포인터가 아닌 필요로하는 것일 수 있습니다. –