C++은 저수준 언어로 메모리 주소에 직접 접근하는 포인터를 활용하여 오브젝트를 관리한다.
그래서 프로그래머가 직접 new를 통해 메모리를 할당하고, delete를 통해 해지해야 하는데, 이를 잘 지키지 못할 경우 여러 문제가 생길 수 있다.
포인터로 인하여 생기는 메모리 관리의 문제점들은, 한 번의 실수라도 프로그램을 종료 시킬 수 있는 치명적인 이슈이다.
Java / C# 같은 고수준 언어들은 이러한 문제 해결을 위해 포인터를 버리고, 가비지 컬렉션 시스템을 도입했다.
Garbage Collection : 프로그램에서 더 이상 사용하지 않는 오브젝트를 자동으로 감지해 메모리를 회수하는 시스템
가비지 컬렉션은 보통 동적으로 생성된 모든 오브젝트 정보를 모아둔 저장소를 사용해 사용되지 않는 메모리를 추적한다.
가장 흔하게 사용되는 방식은 Mark-Sweep 방식의 가비지 컬렉션이다.