auto_ptr

auto_ptr

auto_ptr은 이전 버전의 C++ 표준 라이브러리에서 사용 가능했던 클래스 템플릿입니다(로 선언).<memory> header file)은 C++ raw 포인터의 몇 가지 기본적인 RAII 기능을 제공합니다.unique_ptr 클래스로 대체되었습니다.

auto_ptrtemplate 클래스는 할당된 단일 객체에 대한 포인터를 저장하는 객체를 나타냅니다.이 오브젝트는 컨트롤이 스코프를 [1]벗어날 때 포인터가 자동으로 파기됩니다.

C++11 규격은auto_ptr권장되지 않음, 로 대체unique_ptr클래스 [2][3]템플릿 auto_ptrC++[4]17에서는 완전히 삭제되었습니다.공유 소유권의 경우shared_ptr템플릿 클래스를 사용할 수 있습니다. shared_ptr는 C++11에서 정의되었으며 이전 [5]C++ 버전에서 사용하기 위해 Boost 라이브러리에서도 사용할 수 있습니다.

선언.

auto_ptrISO/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_ptrinstance는 개체의 수명을 담당하는 유일한 엔터티입니다.이 경우,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 컨테이너에는 사용할 수 없습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "auto_ptr Class". Microsoft. Retrieved 2006-09-27.
  2. ^ "Working Draft, Standard for Programming Language C++ N3242" (PDF). 28 February 2011. p. 1233. Retrieved 2013-02-17.
  3. ^ Kalev, Danny. "Using unique_ptr, Part I". informIT. Retrieved 30 September 2010.
  4. ^ "Programming Language C++, Library Evolution Working Group JTC1/SC22/WG21 N4190". 2014-10-09. Retrieved 2016-08-29.
  5. ^ "Collecting Shared Objects". Dr. Dobb's. 2004-07-01. Retrieved 2006-09-27.

외부 링크