=> 자체가 동적할당이다. 타겟으로 잡은 객체는 힙메모리에 할당된다.
c++에서의 가비지 컬렉터라고 할 수 있다.
알아서 해제가 진행된다.
여기서의 리소스는 힙 메모리이다.
: new ~ delete에서 해제를 유저가 직접 해야하는데,
모르고 안해준다거나, 중간에 반환함으로써 memory Leak이 생길수 있다.
스마트 포인터로 할당한다면 스택에 스마트 포인터가 있고, 힙에 메모리 할당되며, 프로그램이 종료될 때 스마트 포인터가 없어지면서 자동으로 힙에 할당된 메모리도 제거된다.
-> 이점 : memory Leak을 방지한다.
-> 스택에 있는 포인터는 제거되지만, 힙에 할당된 리소스를 가리키는 포인터가 제거됨으로서 할당된 메모리는 접근이 불가능하다.
유저가 할당된 메모리를 사용하지 못하고, 이를 메모리 릭이라고 한다.
스마트 포인터를 사용하면
-> 해제를 하지 않앗는데도 소멸자가 호출되는 것을 확인할 수 있다.
스코프 안에서만 유지된다.
문제 유발 코드
-> 배열로 동적할당했는데, 해제를 단일로 하니까 컴파일 에러 발생한 것이다.
정상적인 코드
vector를 사용하면 유저가 굳이 해제할 필요가 없다.
noexcept는 예외처리할수 있으니까 추가함.