auto_ptr
auto_ptrauto_ptr은 이전 버전의 C++ 표준 라이브러리에서 사용 가능했던 클래스 템플릿입니다(로 선언).<memory>
header file)은 C++ raw 포인터의 몇 가지 기본적인 RAII 기능을 제공합니다.unique_ptr 클래스로 대체되었습니다.
그auto_ptr
template 클래스는 할당된 단일 객체에 대한 포인터를 저장하는 객체를 나타냅니다.이 오브젝트는 컨트롤이 스코프를 [1]벗어날 때 포인터가 자동으로 파기됩니다.
C++11 규격은auto_ptr
권장되지 않음, 로 대체unique_ptr
클래스 [2][3]템플릿 auto_ptr
C++[4]17에서는 완전히 삭제되었습니다.공유 소유권의 경우shared_ptr
템플릿 클래스를 사용할 수 있습니다. shared_ptr
는 C++11에서 정의되었으며 이전 [5]C++ 버전에서 사용하기 위해 Boost 라이브러리에서도 사용할 수 있습니다.
선언.
그auto_ptr
ISO/IEC 14882, 섹션 20.4.5에 다음과 같이 명시되어 있습니다.
네임스페이스 표준 { 템플릿 < >학급 Y> 구조 auto_ptr_ref {}; 템플릿 < >학급 X> 학급 auto_ptr { 일반의: 유형화된 X 요소_타입; // 20.4.5.1 구성/복사/삭제: 명시적 auto_ptr(X* p =0) 던지다(); auto_ptr(auto_ptr&) 던지다(); 템플릿 < >학급 Y> auto_ptr(auto_ptr< >Y>&) 던지다(); auto_ptr& 교환입니다.=(auto_ptr&) 던지다(); 템플릿 < >학급 Y> auto_ptr& 교환입니다.=(auto_ptr< >Y>&) 던지다(); auto_ptr& 교환입니다.=(auto_ptr_ref< >X>) 던지다(); ~auto_ptr() 던지다(); // 20.4.5.2 멤버: X& 교환입니다.*() 컨스턴트 던지다(); X* 교환입니다.->() 컨스턴트 던지다(); X* 얻다() 컨스턴트 던지다(); X* 풀어주다() 던지다(); 무효 리셋(X* p =0) 던지다(); // 20.4.5.3 변환: auto_ptr(auto_ptr_ref< >X>) 던지다(); 템플릿 < >학급 Y> 교환입니다. auto_ptr_ref< >Y>() 던지다(); 템플릿 < >학급 Y> 교환입니다. auto_ptr< >Y>() 던지다(); }; }
의미론
그auto_ptr
에는 엄격한 소유권의 의미가 있습니다.즉,auto_ptr
instance는 개체의 수명을 담당하는 유일한 엔터티입니다.이 경우,auto_ptr
복사되면 소스가 참조를 잃게 됩니다.예를 들어 다음과 같습니다.
#실패하다 <iostream> #실패하다 <메모리> 사용. 네임스페이스 표준; 인트 주된(인트 argc, 차 **argv) { 인트 *i = 신규 인트; auto_ptr< >인트> x(i); auto_ptr< >인트> y; y = x; 외치다 << > x.얻다() << > 끝; // 특수 인쇄 외치다 << > y.얻다() << > 끝; // NULL이 아닌 주소 i 인쇄 돌아가다 0; }
이 코드는 최초로 NULL 주소를 인쇄합니다.auto_ptr
할당 중 소스 객체가 참조를 손실했음을 나타내는 객체 및 NULL 이외의 주소(=
raw 포인터i
이 예에서는 삭제하지 마십시오.이것은, 에 의해서 삭제되기 때문입니다.auto_ptr
참조를 소유합니다.실은.new int
직접 전달될 수 있다x
(필요없음)i
.
오브젝트가 포인트 되는 것에 주의해 주세요.auto_ptr
에 의해 파괴됩니다.operator delete
; 이것은, 다음의 명령어만을 사용해야 합니다.auto_ptr
에서 얻을 수 있는 포인터에 대해서operator new
에 의해 반환된 포인터는 제외됩니다.malloc/calloc/realloc
어레이에 대한 포인터(어레이는 에 의해 할당되기 때문에)operator new[]
에 의해 할당 해제되어야 합니다.operator delete[]
).
카피 의미론 때문에auto_ptr
작업에서 요소 복사를 수행할 수 있는 STL 컨테이너에는 사용할 수 없습니다.
「 」를 참조해 주세요.
레퍼런스
- ^ "auto_ptr Class". Microsoft. Retrieved 2006-09-27.
- ^ "Working Draft, Standard for Programming Language C++ N3242" (PDF). 28 February 2011. p. 1233. Retrieved 2013-02-17.
- ^ Kalev, Danny. "Using unique_ptr, Part I". informIT. Retrieved 30 September 2010.
- ^ "Programming Language C++, Library Evolution Working Group JTC1/SC22/WG21 N4190". 2014-10-09. Retrieved 2016-08-29.
- ^ "Collecting Shared Objects". Dr. Dobb's. 2004-07-01. Retrieved 2006-09-27.
외부 링크
- 사용.
auto_ptr
효과적으로 - 에서의 메모리 누전 방지
auto_ptr
- 문서: Danny Kalev의 "클래스 템플릿을 사용한 동적 메모리 관리 촉진"
- Zeesan Amjad의 "컨테이너"
- 기사 Scott Meyers의 "업데이트"
auto_ptr
GNU libstdc++로부터의 클래스 템플릿 참조auto_ptr
Rogue Wave로부터의