소멸자는 객체를 파괴할 때 마다 호출되는 함수다. 소멸자는 생성자와 달리 하나의 오버로드만 있고 인수를 허용하지 않는다.`
리소스 획득은 초기화(RAII)는 리소스를 객체에 묶고 객체 생성 및 파괴 매커니짐을 사용해 프로그램에서 리소스를 자동으로 처리한다. 객체가 범위를 벗아날 때 마다 리소스를 자동으로 해제한다.
예외가 발생하면 모든 리소스를 해제하는 일이 더 어려워진다. 우리는 문제를 발견할 때 마다 예외를 던지기 전에 지금까지 획득했던 모든 리로스를 해제해야 한다.
앞선 문제들은 리소스를 관리하는 클래스를 도입함으로 해결할 수 있다.
리소스 관리자를 구현할 때, 한 클래스에 하나 이상의 리소스를 관리해서는 안된다.
따라서 심시어 같은 타입인 두 리소스를 처리하는 클래스를 작성할 때 마다 리소스 중 하나를 관리하는 클래스를 도입해야 한다. 더 나아가 두 리소스의 관리자를 작성하고 리소스의 내용과 처리 로직을 완전히 분리해야 한다.