정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

auto_ptr 클래스

 

Visual Studio 2017 RC에 대한 최신 설명서는 Visual Studio 2017 RC 설명서를 참조하세요.

제어가 블록을 나갈 때 리소스가 자동으로 삭제되도록 리소스를 스마트 포인터로 래핑합니다.

더욱 강력한 unique_ptr 클래스가 auto_ptr을 대체합니다. 자세한 내용은 참조 unique_ptr 클래스합니다.

에 대 한 자세한 내용은 throw() 및 예외 처리를 참조 하십시오 예외 사양 (throw)합니다.

class auto_ptr {  
  public:  
  typedef Type element_type;  
  explicit auto_ptr(Type* ptr = 0) throw();
  auto_ptr(auto_ptr<Type>& right) throw()
  ;  
  template <class Other>  
  operator auto_ptr<Other>() throw();
  template <class Other>  
  auto_ptr<Type>& operator=(auto_ptr<Other>& right) throw();
  template <class Other>  
  auto_ptr(auto_ptr<Other>& right);
  auto_ptr<Type>& operator=(auto_ptr<Type>& right);
  ~auto_ptr();
  Type& operator*() const throw();
  Type * operator->()const throw();
  Type *get() const throw();
  Type *release()throw();
  void reset(Type* ptr = 0);
  };  

매개 변수

right
기존 리소스를 가져올 auto_ptr입니다.

ptr
저장된 포인터를 바꾸도록 지정된 포인터입니다.

이 템플릿 클래스는 할당된 개체에 대한 auto_ptr,이라는 스마트 포인터를 설명합니다. 포인터는 null이거나 new로 할당된 개체를 지정해야 합니다. 저장된 값이 다른 개체에 할당되면 auto_ptr이 소유권을 전송합니다. null 포인터를 사용한 전송 후 저장된 값을 대체합니다. auto_ptr<Type>에 대한 소멸자는 할당된 개체를 삭제합니다. auto_ptr<Type>은 예외가 발생하는 경우에도 제어가 블록을 나갈 때 할당된 개체가 자동으로 삭제되도록 합니다. 동일한 개체를 소유하는 두 개의 auto_ptr<Type> 개체를 생성하면 안 됩니다.

함수 호출에 대한 인수로 auto_ptr<Type> 개체 값을 전달할 수 있습니다. auto_ptr은 표준 라이브러리 컨테이너의 요소일 수 없습니다. 표준 템플릿 라이브러리 컨테이너를 사용하여 auto_ptr<Type> 개체의 시퀀스를 안정적으로 관리할 수는 없습니다.

생성자

auto_ptrauto_ptr 형식의 개체에 대한 생성자입니다.

Typedefs

element_type이 형식은 템플릿 매개 변수 Type의 동의어입니다.

멤버 함수

get이 멤버 함수는 저장된 포인터 myptr을 반환합니다.
릴리스이 멤버는 저장된 포인터 myptr을 null 포인터로 대체하고 이전에 저장된 포인터를 반환합니다.
다시 설정이 멤버 함수는 저장된 포인터 값 myptr이 함수 호출의 결과로 변경되는 경우에만 delete myptr 식을 계산합니다. 그런 다음 저장된 포인터를 ptr로 바꿉니다.

연산자

연산자 =auto_ptr 개체에서 다른 개체로 소유권을 전송하는 대입 연산자입니다.
연산자 *auto_ptr 형식의 개체에 대한 역참조 연산자입니다.
-> 연산자멤버 액세스를 허용하기 위한 연산자입니다.
operator auto_ptr<>>한 종류의 auto_ptr에서 다른 종류의 auto_ptr로 캐스팅합니다.
operator auto_ptr_ref<>>auto_ptr에서 auto_ptr_ref로 캐스팅합니다.

헤더:<>>

네임스페이스: std

auto_ptr 형식의 개체에 대한 생성자입니다.

 
explicit auto  
_  
ptr(Type* 
    ptr 
= 0) throw();

auto  
_  
ptr(auto 
_  
ptr<Type>& 
    right) throw();

auto  
_  
ptr(auto 
_  
ptr  
_  
ref<Type>   
    right) throw();

template <class Other>  
auto 
_  
ptr(auto 
_  
ptr<Other>& 
    right) throw();

매개 변수

ptr
개체에 대 한 포인터를 auto_ptr 캡슐화 합니다.

right
auto_ptr 생성자에 의해 복사 될 개체입니다.

설명

첫 번째 생성자 저장소 ptr 에서 myptr, 할당 된 개체에 저장 된 포인터입니다. 두 번째 생성자에 저장 된 포인터의 소유권을 전송 right를 저장 하 여 right합니다. 릴리스 에서 myptr합니다.

세 번째 생성자는 동일 하 게 동작의 두 번째 저장 한다는 점을 제외 하 고 오른쪽합니다. ref. 릴리스 에서 myptr여기서 ref 에 저장 하는 참조 right합니다.

서식 파일 생성자는 동일 하 게 작동으로 두 번째 생성자는 제공 하는에 대 한 포인터 다른 에 대 한 포인터로 암시적으로 변환할 수 형식합니다.

예제

// auto_ptr_auto_ptr.cpp  
// compile with: /EHsc  
#include <memory>  
#include <iostream>  
#include <vector>  
  
using namespace std;  
  
class Int   
{  
public:  
   Int(int i)   
   {  
      cout << "Constructing " << ( void* )this  << endl;   
      x = i;  
      bIsConstructed = true;  
   };  
   ~Int( )   
   {  
      cout << "Destructing " << ( void* )this << endl;   
      bIsConstructed = false;  
   };  
   Int &operator++( )   
   {  
      x++;  
      return *this;  
   };  
   int x;  
private:  
   bool bIsConstructed;  
};  
  
void function ( auto_ptr<Int> &pi )  
{  
   ++( *pi );  
   auto_ptr<Int> pi2( pi );  
   ++( *pi2 );  
   pi = pi2;  
}  
  
int main( )   
{  
   auto_ptr<Int> pi ( new Int( 5 ) );  
   cout << pi->x << endl;  
   function( pi );  
   cout << pi->x << endl;  
}  

Constructing 00311AF8  
5  
7  
Destructing 00311AF8  

형식은 템플릿 매개 변수에 대 한 동의어 형식합니다.

 
typedef Type element  
_  
type;  

저장 된 포인터를 반환 하는 멤버 함수 myptr합니다.

 
Type *get() const throw();

반환 값

저장 된 포인터 myptr합니다.

예제

// auto_ptr_get.cpp  
// compile with: /EHsc  
#include <memory>  
#include <iostream>  
#include <vector>  
using namespace std;  
  
class Int   
{  
public:  
   Int(int i)   
   {  
      x = i;  
      cout << "Constructing " << ( void* )this  << " Value: " << x << endl;   
   };  
   ~Int( )   
   {  
      cout << "Destructing " << ( void* )this << " Value: " << x << endl;   
   };  
  
   int x;  
  
};  
  
int main( )   
{  
   auto_ptr<Int> pi ( new Int( 5 ) );  
   pi.reset( new Int( 6 ) );  
   Int* pi2 = pi.get ( );  
   Int* pi3 = pi.release ( );  
   if (pi2 == pi3)  
      cout << "pi2 == pi3" << endl;  
   delete pi3;  
}  

Constructing 00311AF8 Value: 5  
Constructing 00311B88 Value: 6  
Destructing 00311AF8 Value: 5  
pi2 == pi3  
Destructing 00311B88 Value: 6  

auto_ptr 개체에서 다른 개체로 소유권을 전송하는 대입 연산자입니다.

template <class Other>  
auto_ptr<Type>& operator=(auto_ptr<Other>& right) throw();

auto_ptr<Type>& operator=(auto_ptr<Type>& right) throw();

auto_ptr<Type>& operator=(auto_ptr_ref<Type>  
right) throw();

매개 변수

right
auto_ptr 형식의 개체입니다.

반환 값

형식의 개체에 대 한 참조 auto_ptr < 형식>.

설명

할당 된 식을 평가 myptr 삭제, 경우에 저장 된 포인터 myptr 할당으로 인해 변경 합니다. 그런 다음 _에 저장 된 포인터의 소유권을 전송 오른쪽를 저장 하 여 _ 오른쪽합니다. 릴리스 에서 myptr합니다. 함수 반환 ** *이**합니다.

예제

멤버 연산자의 사용 예를 들어 참조 auto_ptr:: auto_ptr합니다.

auto_ptr 형식의 개체에 대한 역참조 연산자입니다.

 
Type& operator*() const throw();

반환 값

형식의 개체에 대 한 참조 형식 포인터를 소유 하 합니다.

설명

간접 참조 연산자 반환 * 가져오기합니다. 따라서 저장 된 포인터 null 이어야 합니다.

예제

멤버 함수를 사용 하는 방법의 예제를 참조 하십시오. auto_ptr:: auto_ptr합니다.

멤버 액세스를 허용하기 위한 연산자입니다.

 
Type * operator->() const throw();

반환 값

개체의 멤버는 auto_ptr 소유 합니다.

설명

선택 연산자 반환 가져오기( )되도록 식 ap-> 멤버 동일 하 게 동작 ( ap합니다. get( ) )-> member, where ap is an object of class auto_ptr< Type>. 따라서 저장 된 포인터, null 이어야 합니다 및 형식 클래스, 구조체 또는 공용 구조체 형식으로 있어야는 멤버 멤버입니다.

예제

멤버 함수를 사용 하는 방법의 예제를 참조 하십시오. auto_ptr:: auto_ptr합니다.

한 종류의 auto_ptr에서 다른 종류의 auto_ptr로 캐스팅합니다.

 
template <class Other>  
operator auto 
_  
ptr<Other>() throw();

반환 값

형식 캐스팅 연산자 반환 auto_ptr < 다른> ( ** *이**).

예제

// auto_ptr_op_auto_ptr.cpp  
// compile with: /EHsc  
#include <memory>  
#include <iostream>  
#include <vector>  
  
using namespace std;  
int main()  
{  
   auto_ptr<int> pi ( new int( 5 ) );  
   auto_ptr<const int> pc = ( auto_ptr<const int> )pi;  
}  

캐스트는 auto_ptrauto_ptr_ref합니다.

 
template <class Other>  
operator auto 
_  
ptr  
_  
ref<Other>() throw();

반환 값

형식 캐스팅 연산자 반환 auto_ptr_ref< 다른> ( ** *이**).

예제

// auto_ptr_op_auto_ptr_ref.cpp  
// compile with: /EHsc  
#include <memory>  
#include <iostream>  
#include <vector>  
  
using namespace std;  
  
class C{  
   public:  
   C(int _i) : m_i(_i){  
   }  
   ~C(){  
      cout << "~C:  "<< m_i <<"\n";  
   }  
   C &operator =(const int &x){  
      m_i = x;  
      return *this;  
   }  
   int m_i;  
};  
void f(auto_ptr<C> arg ){  
};  
int main()  
{  
   const auto_ptr<C> ciap ( new C(1) );  
   auto_ptr<C> iap ( new C(2) );  
  
   // Error: this implies transfer of ownership of iap's pointer  
   // f(ciap);   
   f(iap); // compiles, but gives up ownership of pointer  
  
   // here, iap owns a destroyed pointer so the following is bad:  
   // *iap = 5; // BOOM  
  
   cout << "main exiting\n";  
}  

~C:  2  
main exiting  
~C:  1  

저장 된 포인터를 대체 하는 멤버 myptr 를 null 포인터로 하 고 이전에 저장 된 포인터를 반환 합니다.

 
Type *release() throw();

반환 값

이전에 저장 된 포인터입니다.

설명

저장 된 포인터를 대체 하는 멤버 myptr 를 null 포인터로 하 고 이전에 저장 된 포인터를 반환 합니다.

예제

// auto_ptr_release.cpp  
// compile with: /EHsc  
#include <memory>  
#include <iostream>  
#include <vector>  
using namespace std;  
  
class Int   
{  
public:  
   Int( int i )   
   {  
      x = i;  
      cout << "Constructing " << ( void* )this << " Value: " << x << endl;   
   };  
   ~Int( ) {  
      cout << "Destructing " << ( void* )this << " Value: " << x << endl;   
   };  
  
   int x;  
  
};  
  
int main( )   
{  
   auto_ptr<Int> pi ( new Int( 5 ) );  
   pi.reset( new Int( 6 ) );  
   Int* pi2 = pi.get ( );  
   Int* pi3 = pi.release ( );  
   if ( pi2 == pi3 )  
      cout << "pi2 == pi3" << endl;  
   delete pi3;  
}  

Constructing 00311AF8 Value: 5  
Constructing 00311B88 Value: 6  
Destructing 00311AF8 Value: 5  
pi2 == pi3  
Destructing 00311B88 Value: 6  

멤버 함수는 식을 계산 삭제Â myptr, 경우에 저장 된 포인터 값 myptr 는 함수 호출의 결과로 변경 합니다. 다음으로 저장 된 포인터를 대체 ptr합니다.

 
void reset(Type* 
    ptr = 0);

매개 변수

ptr
저장 된 포인터를 대체 하는 지정 된 포인터가 myptr합니다.

예제

// auto_ptr_reset.cpp  
// compile with: /EHsc  
#include <memory>  
#include <iostream>  
#include <vector>  
  
using namespace std;  
  
class Int   
{  
public:  
   Int( int i )   
   {  
      x = i;  
      cout << "Constructing " << ( void* )this << " Value: " << x << endl;   
   };  
   ~Int( )   
   {  
      cout << "Destructing " << ( void* )this << " Value: " << x << endl;   
   };  
  
   int x;  
};  
  
int main( )   
{  
   auto_ptr<Int> pi ( new Int( 5 ) );  
   pi.reset( new Int( 6 ) );  
   Int* pi2 = pi.get ( );  
   Int* pi3 = pi.release ( );  
   if ( pi2 == pi3 )  
      cout << "pi2 == pi3" << endl;  
   delete pi3;  
}  

Constructing 00311AF8 Value: 5  
Constructing 00311B88 Value: 6  
Destructing 00311AF8 Value: 5  
pi2 == pi3  
Destructing 00311B88 Value: 6  

C + + 표준 라이브러리의 스레드 보안
unique_ptr 클래스

표시: