


{}안에서 생성된 경우 중괄호 나갈 시 메모리 해제됨for (int i = 0; i < 3; i++) {
int temp = i; // 3번 생성과 소멸
}
temp는 생성되었다가 사라지는 것을 3번 반복new와 delete로 할당하고 관리하는 대신 스마트 포인터로 자동으로 관리객체에 대한 단일 소유권을 관리
객체의 소유권을 명확히 하고 소유권 이전을 통해 효율적인 자원관리가 가능
move 를 통해 소유권을 이동하는 식으로 관리

레퍼런스 카운트를 관리
레퍼런스 카운트란 현재 객체를 참조하는 포인터의 개수를 카운팅
레퍼런스 카운트가 0이 되면 객체는 자동으로 메모리 해제
Dangling Pointer 및 MemoryLeak 문제를 효과적으로 방지

객체의 소유권을 공유하지 않음
다른 스마트 포인터와 다르게 레퍼런스 카운트를 증가시키지 않는 약한 참조를 함
shared_ptr 는 유용하지만 순환참조가 발생 가능
순환 참조란, 두 개 이상의 객체가 서로를 shared_ptr로 가리켜 참조하는 상황. 메모리 누수를 유발할 수 있다.
이 상황에서 서로 순환하고 있는 shared_ptr중 하나를 weak_ptr로 대체하면 순환 고리가 끊어지게 되므로 문제를 해결
