출처 : http://egloos.zum.com/sweeper/v/2826435
1. auto_ptr
TR1이 발표되기 전까지 std::auto_ptr이 C++ Standara library의 유일한 스마트 포인터였다.
스마트 포인터의 기본적인 특성인 자신이 소멸될 때 가리키고 있는 대상에 대해 자동으로 delete 해줘 메모리 누수 걱정은 없게 작성이 되어 있다.
하지만, auto_ptr은 유일 소유권 개념이 있어서, 객체가 복사되는 순간(복사생성 또는 대입연산) 원래의 auto_ptr은 바로 NULL 처리가 되어 버린다.
class AAA; // RAII 방식으로... AAA 객체 생성 std::auto_ptr<AAA> AAAObject(new AAA()); // 복사가 되는 순간, AAAObject는 NULL이 되고, 이제 BBBObject 만이 객체를 가리킨다. std::auto_ptr<AAA> BBBObject(AAAObject); // 역시 대입이 되는 순간, BBB는 NULL, 이제 AAA가 객체를 가리킴. AAAObject = BBBObject;
이렇듯 괴상망측한 복사 동작으로
…