auto_ptr — std::auto_ptr

auto_ptr — std::auto_ptr

std::auto_ptr는 소유권(ownership)을 가진 스마트 포인터의 초기 형태예요. 단순히 포인터를 소유하고, 파괴 시 가리키는 객체를 삭제해요.

안타깝게도 auto_ptr는 복사 의미론이 특이해서, 복사하면 소유권이 이전(move) 되어 버려요. 이는 예상치 못한 동작을 만들어내는 원인이 됐어요. C++11에서 std::unique_ptr로 대체되었고, C++17에서 제거됐어요.

출처: cppreference

본문

std::auto_ptr는 포인터를 소유하는 스마트 포인터로, 파괴 시 가리키는 객체를 delete해요.

template<class T> class auto_ptr;

복사 생성자와 복사 대입 연산자가 소유권을 옮기는 방식으로 동작해요 — 복사 후에는 원본 auto_ptrnullptr이 되고, 대상이 이전 객체를 소유해요. 이 때문에 컨테이너에 넣거나 복사하는 코드가 의도와 다르게 동작할 수 있었어요.

auto_ptr는 C++98에서 도입됐지만 여러 문제가 발견되어, C++11에서 unique_ptr가 더 안전한 대안으로 제안됐고, C++17 표준에서 완전히 제거되었어요. 새 코드에서는 std::unique_ptr 또는 std::shared_ptr를 사용해야 해요.

같이 보기

  • std::unique_ptr
  • std::shared_ptr

더 알아보기 (Learn more)

cppreference