smart pointer2 [Modern C++] weak_ptr, unique_ptr ■ shared_ptr의 한계점 shared_ptr k1(new Knight()); shared_ptr k2(new Knight()); k1->_target = k2; k2->_target = k1; 위와 같이 서로를 참조하고 있을 때 둘의 Ref Count는 각각 2가 된다. 애당초 ref count가 0이 되어야 메모리를 해제(delete)시키는데 k1이 소멸되어 ref count를 -1한다고 해도 ref count는 여전히 1이 되어버린다. 그러면 결국엔 서로를 추적하고 있는 상황에선 메모리 해제가 일어나지 않는 버그가 발생하므로 메모리 릭(Memory Leak)이 일어난다. ▼ Ref Count가 0이 안되어서 소멸자가 호출이 안되는 상황 이런 상황에선 임의로 우리가 어떤 유저가 로그아웃을 해가지.. 2024. 3. 31. [Modern C++] shared_ptr ■ 기존 포인터의 문제 동적 할당을 하고 메모리 해제(delete)를 하지 않으면 메모리 릭(Memory leak)이 일어나서 언젠가 메모리를 모두 고갈하여 프로그램이 터지는 일이 발생할 수 있다. 이를 자동으로 관리해주기 위해 template 문법을 사용하여 우리가 임의로 wrapper 클래스를 만들어 이용할 수도 있다. 이럴 경우 Wrapper클래스가 소멸될 때 자동으로 _ptr가 담고있는 주소를 따라들어가 k1 메모리를 해제할 것이다. 하지만 객체를 하나가 아니라 다수가 참조하고 있을 때 이런 Wrapper클래스를 사용하고 있어도 아래와 같은 문제가 발생할 수 있다. [기본 포인터의 문제 예] 화살을 쏴서 화살이 목적지에 도달하고 있는데 목적지가 delete 되었을 때 등등 참조해야하는 메모리가 중.. 2024. 3. 31. 이전 1 다음