본문 바로가기

개발 관련 기타/C++

C++) [스마트 포인터] weak_pointer, unique_pointer, shared_pointer

  • unique_ponter는 이름이 말하듯이 unique 하게 한 곳에서만 해당 객체를 사용할 때 다른 곳에서는 쉽게 사용하지 못하도록 막는 smart pointer 이다.
  • shared_pointer는 약점이 있다. A -> B를 참조하고 B -> A를 참조 할 때 메모리를 해제 할 수 없다.
    • Scope에서 벗어나 A를 해제 하였을 때 B -> A를 참조해서 삭제 안됨.
    • Scope에서 벗어나 B를 해제 하였을 때 A -> B를 참조해서 삭제 안됨.
  • weak_pointer를 사용해서 위 문제를 해결 할 수 있다.
    • B -> A shared_pointer를 이용하는 weak_pointer로 만들면 참조는 가능하지만 ref count를 증가시키지 않는다
      • weak_pointer는 ref count를 증가시키지 않는 shared_pointer라고 생각하면 된다.
      • shared_pointer가 살아있는지를 weak_pointer의 lock 함수를 사용해서 확인 후 shared_pointer의 객체를 참조하는 weak_pointer를 생성하면 된다.
    • weak_pointer가 scope에서 사라져 더 이상 참조하지 않을 때 "이제 참조하지 않는다" 라고 알리는 것이 가능하다.