더북(TheBook)

weak_ptr<T> 객체는 다음과 같이 생성할 수 있다.

auto pData = std::make_shared<X>();   // 타입 X의 객체에 대한 공유 포인터를 생성
std::weak_ptr<X> pwData {pData};      // 공유 포인터에서 약한 포인터 생성
std::weak_ptr<X> pwData2 {pwData};    // 약한 포인터에서 약한 포인터 생성

따라서 weak_ptr<T>shared_ptr<T>에서 생성하거나 다른 weak_ptr<T>에서 생성할 수 있다. 약한 포인터(weak pointer)로는 할 수 있는 게 많지 않다. 즉, 약한 포인터가 가리키는 객체는 역참조해서 접근할 수 없다.

약한 포인터가 가리키는 객체의 유무만 테스트할 수 있다. 즉, 약한 포인터가 가리키는 shared_ptr<T>가 여전히 거기에 있는지만 확인할 수 있다.

weak_ptr<T> 객체에서 shared_ptr<T> 객체를 생성할 수 있다.

약한 포인터가 참조하는 객체의 유무를 테스트하는 방법은 다음과 같다.

if(pwData.expired())
   std::cout << "객체가 존재하지 않습니다.\n";

pwData 객체의 expired() 함수는 객체가 없으면 true를 반환한다. 약한 포인터에서 공유 포인터를 생성하려면 lock()을 사용한다.

std::shared_ptr<X> pNew {pwData.lock()};

lock() 함수는 객체가 있으면 pNew를 초기화하는 새로운 shared_ptr<X> 객체를 반환하면서 객체를 잠근다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.