쓰지 않는 자원은 반드시 메모리 할당을 해제 해 줘야한다.
그런데 이것을 사용자가 하게 하면 자원 해제를 해주지 못할 확률이 매우 높다.
그래서 자원을 객체 자체가 관리하게 해주는 것이 좋은데, 이 뜻은 delete를 사용자가 하게 하지 않고, 소멸자 안에서 delete를 호출하고,
소멸자는 사용자가 아니라, 객체 자체가 자신의 참조를 인식해서 자동으로 해제해 주게 한다는 뜻이다.
이것을 하는 방법으로서 스마트포인터의 일종인 std의 auto_ptr과 tr1의 shared_ptr 등이 있다.
1. std::auto_ptr은 자신이 가리키는 객체의 소멸자가 자동으로 호출되게 하며, 두개의 auto_ptr이 하나의 객체를 가리킬 수 없고,
auto_ptr끼리 대입하면 대입 된 auto_ptr은 자동으로 null로 바꿔준다. 이때문에 stl의 원소로는 쓸수가 없다.
2.tr1::shared_ptr은 소멸자 자동호출 기능은 같으나, 참조 카운팅 방식으로 카운팅이 0이되면 소멸자를 불러준다. stl에도 사용가능.