auto_ptr은 더 이상 사용되지 않습니까?


83
  1. 들어오는 C ++ 표준에서 auto_ptr이 더 이상 사용되지 않습니까?
  2. shared_ptr 대신 소유권 이전에 unique_ptr을 사용해야합니까?
  3. unique_ptr이 표준에없는 경우 shared_ptr을 대신 사용해야합니까?

답변:


80

업데이트 :이 답변은 2010 년에 작성되었으며 예상대로 std::auto_ptr더 이상 사용되지 않습니다. 조언은 전적으로 유효합니다.

C ++에서는 0x std::auto_ptr대신 std::unique_ptr. 스마트 포인터의 선택은 사용 사례와 요구 사항에 따라 달라지며 std::unique_ptr컨테이너 내에서 사용할 수있는 단일 소유권에 대한 이동 의미 체계 (이동 의미 체계 사용)와 std::shared_ptr소유권이 공유 될 때 사용 됩니다.

상황에 가장 잘 맞는 스마트 포인터를 사용하고 올바른 포인터 유형을 선택하면 다른 프로그래머가 디자인에 대한 통찰력을 얻을 수 있습니다.


22

예, 오늘 auto_ptr부터 C ++ 0x에서 더 이상 사용되지 않으며 unique_ptr대신 사용해야 합니다. 최신 초안 표준 (n3035), 섹션 D.9에서

클래스 템플릿 auto_ptr은 더 이상 사용되지 않습니다. [참고 : 클래스 템플릿 unique_ptr(20.9.10)이 더 나은 솔루션을 제공합니다. —end note]

표준이 비준 될 때까지위원회가이 결정을 수정할 가능성은 거의 없다고 생각합니다.


18

C ++ 11 (D.10, 1228 페이지)에서auto_ptr 더 이상 사용되지 않을뿐만 아니라 향후 버전의 C ++ 에서도 삭제됩니다 .

N4190을 채택하고 auto_ptr, bind1st/ bind2nd, ptr_fun/ mem_fun/ mem_fun_ref, 등을 포함하여 C ++ 표준 라이브러리에서 몇 가지 구식 항목을 실제로 제거했습니다 (더 이상 사용되지 않음) random_shuffle. 이제 C ++ 17 표준 라이브러리 초안에서 모두 제거되었으며 향후 이식 가능한 C ++의 일부가 아닙니다.

이에 대한 또 다른 문서 : Programming Language C ++, Library Evolution Working Group-Document N4190 , if you want more information.

대신 다음 auto_ptr을 사용 하여 자동으로 모든 코드를 변환 할 수 있습니다 unique_ptr.

사용하는 모든 코드는 auto_ptr기계적으로 사용하여 변환 할 수 있습니다 unique_ptr와 함께, move()때마다 삽입 auto_ptr"복사"되고 있었다.


3

아니요, 더 이상 사용되지 않습니다. C ++ 0x가 받아 들여지면 그럴 수 있습니다. 그리고 그것은 현실적으로 항상 지원 될 것입니다. 사용되지 않는 기능이 실제 C ++ 구현에서 삭제 된 적이 없다고 생각합니다.


5
C ++ 표준은 한 번만 업데이트되었으며 기본적으로 기술적 인 정정 (즉, 인용 된 문제에 대한 수정)이었습니다. 아무것도 제거하지 않은 것은 놀라운 일이 아닙니다. OTOH, 오래된 기능은 결국 컴파일러에서 삭제됩니다. 예를 들어, 사용 된 <iostream.h>것보다 더 많은 C ++ 가 사용 auto_ptr되었지만 MS VC ++ (1 인 경우)는 더 이상이를 제공하지 않습니다.
Jerry Coffin

1
@Jerry iostream.h는 표준의 일부가 아닙니다. 따라서 더 이상 사용되지 않습니다.

@Neil : 아니요.하지만 많이 사용되었습니다 . auto_ptr표준의 일부이지만 상당히 적게 사용됩니다. 실제적인 관점에서 볼 때, 그 제거는 훨씬 적은 영향을 미칠 것입니다.
Jerry Coffin

2
@Jerry 잘 나는 auto_ptr을 많이 사용하고 iostream.h를 전혀 사용하지 않습니다. 나는 때때로 C ++ 표준위원회가 지원 중단과 관련하여 집단적인 보닛에 약간의 벌이 있다고 생각합니다. 원래 문자열 스트림과 같은 일부는 분명히 잘못되었지만 완벽하게 사용할 수있는 "정적"키워드 대신 이름없는 네임 스페이스를 사용한다는 생각과 같은 것은 완전히 괴롭힘을당했습니다.

1
@Neil : 글쎄요. 내가 개인적으로 무엇을하든 상관없이 "<iostream.h>"에 대한 Google 검색은 ~ 263'000 히트를 산출하고 auto_ptr과 동일하게 수행하면 ~ 66'000 히트를 제공합니다.
Jerry Coffin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.