memory_auto_ptr

memory_auto_ptr (std::auto_ptr)

<memory> 헤더에 정의되어 있어요. new 표현식으로 얻은 객체를 관리하고, auto_ptr 자신이 파괴될 때 그 객체를 delete하는 스마트 포인터예요. C++11에서 deprecated, C++17에서 제거됐어요. 지금은 std::unique_ptr을 쓰는 것이 옳아요.

출처: cppreference

본문

template< class T > class auto_ptr;   // (1) deprecated in C++11, removed in C++17

template<> class auto_ptr<void>;      // (2) deprecated in C++11, removed in C++17

auto_ptrnew 표현식으로 얻은 객체를 관리하고, auto_ptr 자신이 파괴될 때 그 객체를 delete해요. 동적 할당 객체에 예외 안전성을 제공하고, 동적 할당 객체의 소유권을 함수에 전달하거나 함수에서 반환하는 데 쓸 수 있었어요.

auto_ptr을 복사하면 포인터를 복사하고 소유권을 대상으로 이전해요. 즉 복사 생성과 복사 대입 모두 오른쪽 인자를 수정하고, "복사본"은 원본과 같지 않아요. 이런 비정상적인 복사 의미론 때문에 auto_ptr은 표준 컨테이너에 넣을 수 없어요. 이런 용도와 다른 용도에는 std::unique_ptr이 선호돼요. (C++11)

    1. void 타입 특수화는 element_type typedef를 선언하지만 멤버 함수는 없어요.

문서 전반에 걸쳐 언급되는 auto_ptr_ref라는 추가 클래스 템플릿은 auto_ptr에 대한 참조를 보관하는 구현 정의 타입이에요.

멤버 타입

타입 정의
element_type T

auto_ptrstd::unique_ptr로 대체됐어요. 이전 코드에서는 auto_ptr이 소유권을 이동하는 복사 동작을 했지만, unique_ptr은 명시적인 std::move로만 소유권을 이전해요. 새 코드에서는 반드시 unique_ptr을 사용해야 해요.

더 알아보기 (Learn more)

cppreference