Smart Pointer의 이해 - ③ weak_ptr의 개념과 활용 weak_ptr 메모리 누수를 방지하기 위해서 우리는 스마트 포인터를 사용하려 한다. 하지만 클래스의 멤버 변수에서 shared_ptr을 사용할 경우 순환 참조가 발생할 경우 메모리 누수가 발생한다. 이를 방지하기 위해서 weak_ptr을 사용할 수 있다. weak_ptr을 사용하면 shared_ptr처럼 오브젝트를 가리킬 수 있지만 Reference count에는 아무런 영향을 주지 않는다. 아래의 예시를 살펴보자. weak_ptr이 객체를 가리키고 있지만 shared_ptr이 해제될 때 함께 해제되는 모습을 확인할 수 있다. 또한 weak_ptr이 객체를 참조하고 있지만 참조 카운터는 증가하지 않은 모습도 확인할 수 있다. class A { public: A(int n) : num(n) { std::.. Computer Science/C++ 4년 전
Smart Pointer의 이해 - ② shared_ptr의 개념과 활용 shared_ptr unique_ptr은 객체에 대한 소유권을 하나의 스마트 포인터가 독점함을 보장했다. 하지만, 하나의 객체를 여러 포인터가 공유해야 하는 경우도 존재한다. 이럴 때는 shared_ptr을 사용할 수 있다. shared_ptr을 사용하면 개발자는 resource의 life cycle를 고려할 필요 없이 오브젝트의 소유권을 여러 scope에서 공유 가능하도록 만들 수 있다. shared_ptr은 여러개의 포인터가 하나의 객체를 가리키고 있고, 하나의 객체를 몇 개의 포인터가 참조하고 있는지를 Reference count에 기록한다. 이 Reference count가 0이 될 경우 객체를 자유공간에서 해제한다. 이해를 돕기 위해서 아래의 코드를 살펴보자. use_count 함수는 현재 포인.. Computer Science/C++ 4년 전