- 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에서 사라져 더 이상 참조하지 않을 때 "이제 참조하지 않는다" 라고 알리는 것이 가능하다.
- B -> A shared_pointer를 이용하는 weak_pointer로 만들면 참조는 가능하지만 ref count를 증가시키지 않는다
'개발 관련 기타 > C++' 카테고리의 다른 글
C++) check whether file exists 파일 존재 여부 확인 [access(2)] (0) | 2020.10.14 |
---|---|
C++) static 멤버 변수 life cycle (0) | 2020.09.28 |
C++) Reader-Writer 문제로 본 mutex와 condition variable (0) | 2020.06.29 |
C++) std::bind 와 std::placeholders (std::placeholders::_1, std::placeholders::_2, ...) (0) | 2020.06.24 |
C++) RAII 디자인 패턴 (0) | 2020.05.28 |