weak_ptr
을 역 참조하면 포인터가 만료되었는지 자동으로 확인하지 않습니다. 왜 이런 방식으로 설계 되었습니까?weak_ptr - Dereferencing - 만료시 throw
약점을 expired()
을 사용하여 확인하지 않고 안전하게 참조 해제하고 null 인 경우 예외를 throw하고 싶습니다.
이 방법이 좋은 방법이 될 수 있으며 올바른 방법은 무엇입니까? *
과 ->
연산자를 오버로드하여이 검사를 먼저 수행해야합니까? 무료 함수를 작성해야합니까? 같은
뭔가 : 다음
template< typename T >
weak_ptr<T> & check(weak_ptr<T> & p)
{
if(p.expired())
throw logic_error("Trying to dereference a null pointer.");
return p;
}
그리고 :
weak_ptr<int> pi;
int i = *check(pi);
감사합니다.
을하지만 ... 당신이 할 수없는 약한 포인터 역 참조 . 당신은 그것을 잠그고 그것을 공유하고 그것을 사용해야합니다. – skypjack
경쟁 조건을 피하기 위해 원시 포인터에 액세스하기 전에 shared_ptr을 변환/생성해야합니다. –