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_ptr은 new 표현식으로 얻은 객체를 관리하고, auto_ptr 자신이 파괴될 때 그 객체를 delete해요. 동적 할당 객체에 예외 안전성을 제공하고, 동적 할당 객체의 소유권을 함수에 전달하거나 함수에서 반환하는 데 쓸 수 있었어요.
auto_ptr을 복사하면 포인터를 복사하고 소유권을 대상으로 이전해요. 즉 복사 생성과 복사 대입 모두 오른쪽 인자를 수정하고, "복사본"은 원본과 같지 않아요. 이런 비정상적인 복사 의미론 때문에 auto_ptr은 표준 컨테이너에 넣을 수 없어요. 이런 용도와 다른 용도에는 std::unique_ptr이 선호돼요. (C++11)
-
void타입 특수화는element_typetypedef를 선언하지만 멤버 함수는 없어요.
문서 전반에 걸쳐 언급되는 auto_ptr_ref라는 추가 클래스 템플릿은 auto_ptr에 대한 참조를 보관하는 구현 정의 타입이에요.
멤버 타입
| 타입 | 정의 |
|---|---|
element_type |
T |
auto_ptr은 std::unique_ptr로 대체됐어요. 이전 코드에서는 auto_ptr이 소유권을 이동하는 복사 동작을 했지만, unique_ptr은 명시적인 std::move로만 소유권을 이전해요. 새 코드에서는 반드시 unique_ptr을 사용해야 해요.