- 들어오는 C ++ 표준에서 auto_ptr이 더 이상 사용되지 않습니까?
- shared_ptr 대신 소유권 이전에 unique_ptr을 사용해야합니까?
- unique_ptr이 표준에없는 경우 shared_ptr을 대신 사용해야합니까?
답변:
업데이트 :이 답변은 2010 년에 작성되었으며 예상대로 std::auto_ptr
더 이상 사용되지 않습니다. 조언은 전적으로 유효합니다.
C ++에서는 0x std::auto_ptr
대신 std::unique_ptr
. 스마트 포인터의 선택은 사용 사례와 요구 사항에 따라 달라지며 std::unique_ptr
컨테이너 내에서 사용할 수있는 단일 소유권에 대한 이동 의미 체계 (이동 의미 체계 사용)와 std::shared_ptr
소유권이 공유 될 때 사용 됩니다.
상황에 가장 잘 맞는 스마트 포인터를 사용하고 올바른 포인터 유형을 선택하면 다른 프로그래머가 디자인에 대한 통찰력을 얻을 수 있습니다.
예, 오늘 auto_ptr
부터 C ++ 0x에서 더 이상 사용되지 않으며 unique_ptr
대신 사용해야 합니다. 최신 초안 표준 (n3035), 섹션 D.9에서
클래스 템플릿
auto_ptr
은 더 이상 사용되지 않습니다. [참고 : 클래스 템플릿unique_ptr
(20.9.10)이 더 나은 솔루션을 제공합니다. —end note]
표준이 비준 될 때까지위원회가이 결정을 수정할 가능성은 거의 없다고 생각합니다.
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
"복사"되고 있었다.
아니요, 더 이상 사용되지 않습니다. C ++ 0x가 받아 들여지면 그럴 수 있습니다. 그리고 그것은 현실적으로 항상 지원 될 것입니다. 사용되지 않는 기능이 실제 C ++ 구현에서 삭제 된 적이 없다고 생각합니다.
auto_ptr
표준의 일부이지만 상당히 적게 사용됩니다. 실제적인 관점에서 볼 때, 그 제거는 훨씬 적은 영향을 미칠 것입니다.
<iostream.h>
것보다 더 많은 C ++ 가 사용auto_ptr
되었지만 MS VC ++ (1 인 경우)는 더 이상이를 제공하지 않습니다.