weaked_ptr.lock()을 했을 때, 포인터를 리턴하는 방법

  1. shared_ptr이 생성되면, 레퍼런스 카운트로 사용 할 uses와 weaks 두 개의 값이 1로 세팅.
  2. weak_ptr에 shared_ptr을 대입하면,
    weaks 값이 2로 증가되고, weak_ptr은 shared_ptr의 레퍼런스 카운터를 참조
  3. weak_ptr.lock()을 호출하면, uses 값이 0 이상인지를 체크하여 포인터를 리턴
    현재는 uses > 0이므로, 유효한 포인터 리턴
  4. shared_ptr이 파괴되면, uses 값과 weaks 값이 감소한다. 이 때, uses값은 0이 된다.
  5. weak_ptr.lock()을 호출하면, uses 값이 0 이상인지를 체크하여 포인터를 리턴
    현재는 uses == 0이므로, 널 포인터 리턴