다음을 통해 공유


CAutoPtr 클래스

이 클래스는 스마트 포인터 개체를 나타냅니다.

Important

이 클래스와 해당 멤버는 Windows 런타임에서 실행되는 애플리케이션에서 사용할 수 없습니다.

구문

template <typename T>
class CAutoPtr

매개 변수

T
포인터 형식입니다.

멤버

Public 생성자

속성 설명
CAutoPtr::CAutoPtr 생성자입니다.
CAutoPtr::~CAutoPtr 소멸자입니다.

공용 메서드

이름 설명
CAutoPtr::Attach 이 메서드를 호출하여 기존 포인터의 소유권을 가져옵니다.
CAutoPtr::Detach 포인터의 소유권을 해제하려면 이 메서드를 호출합니다.
CAutoPtr::Free 이 메서드를 호출하여 .에서 가리키는 개체를 CAutoPtr삭제합니다.

Public 연산자

속성 설명
CAutoPtr::operator T* 캐스트 연산자입니다.
CAutoPtr::operator = 할당 연산자입니다.
CAutoPtr::operator -> 멤버에 대한 포인터 연산자입니다.

공용 데이터 멤버

속성 설명
CAutoPtr::m_p 포인터 데이터 멤버 변수입니다.

설명

이 클래스는 스마트 포인터를 만들고 관리하기 위한 메서드를 제공합니다. 스마트 포인터는 범위를 벗어날 때 리소스를 자동으로 해제하여 메모리 누수로부터 보호하는 데 도움이 됩니다.

CAutoPtr또한 '의 복사 생성자 및 대입 연산자는 포인터의 소유권을 전송하여 원본 포인터를 대상 포인터로 복사하고 원본 포인터를 NULL로 설정합니다. 따라서 각각 두 개의 CAutoPtr 개체가 동일한 포인터를 저장하는 것은 불가능하며 동일한 포인터를 두 번 삭제할 가능성이 줄어듭니다.

CAutoPtr 또한 포인터 컬렉션의 생성을 간소화합니다. 컬렉션 클래스를 파생시키고 소멸자를 재정의하는 대신 개체 컬렉션을 CAutoPtr 만드는 것이 더 간단합니다. 컬렉션이 삭제되면 개체가 CAutoPtr 범위를 벗어나 자동으로 삭제됩니다.

CHeapPtr및 변형은 C++ new 및 연산자 대신 다른 힙 함수를 사용하여 메모리를 할당하고 delete 해제한다는 점을 제외하고 동일한 방식으로 CAutoPtr작동합니다. CAutoVectorPtrCAutoPtr는 벡터 new[] 및 벡터 삭제[]를 사용하여 메모리를 할당하고 해제한다는 점뿐입니다.

스마트 포인터의 배열 또는 목록이 필요한 경우도 CAutoPtrArray CAutoPtrList 확인합니다.

요구 사항

헤더: atlbase.h

예시

// A simple class for demonstration purposes

class MyClass 
{
   int iA;
   int iB;
public:
   MyClass(int a, int b);
   void Test();
};

MyClass::MyClass(int a, int b)
{
   iA = a;
   iB = b;
}

void MyClass::Test()
{
   ATLASSERT(iA == iB);
}

// A simple function

void MyFunction(MyClass* c)
{
   c->Test();
}

int UseMyClass()
{
   // Create an object of MyClass.
   MyClass *pMyC = new MyClass(1, 1);

   // Create a CAutoPtr object and have it take
   // over the pMyC pointer by calling Attach.
   CAutoPtr<MyClass> apMyC;
   apMyC.Attach(pMyC);

   // The overloaded -> operator allows the 
   // CAutoPtr object to be used in place of the pointer.
   apMyC->Test();

   // Assign a second CAutoPtr, using the = operator.
   CAutoPtr<MyClass> apMyC2;
   apMyC2 = apMyC;

   // The casting operator allows the
   // object to be used in place of the pointer.
   MyFunction(pMyC);
   MyFunction(apMyC2);

   // Detach breaks the association, so after this
   // call, pMyC is controlled only by apMyC.
   apMyC2.Detach();

   // CAutoPtr destroys any object it controls when it
   // goes out of scope, so apMyC destroys the object 
   // pointed to by pMyC here.
   return 0;
}

CAutoPtr::Attach

이 메서드를 호출하여 기존 포인터의 소유권을 가져옵니다.

void Attach(T* p) throw();

매개 변수

p
개체는 CAutoPtr 이 포인터의 소유권을 맡습니다.

설명

개체가 CAutoPtr 포인터의 소유권을 가져오는 경우 범위를 벗어나면 포인터와 할당된 데이터가 자동으로 삭제됩니다. 호출되면 CAutoPtr::Detach 프로그래머에게 할당된 리소스를 해제할 책임이 다시 부여됩니다.

디버그 빌드에서 데이터 멤버가 현재 기존 값을 가리키는 경우 CAutoPtr::m_p 어설션 오류가 발생합니다. 즉, NULL과 같지 않습니다.

예시

개요의 예제를 CAutoPtr 참조하세요.

CAutoPtr::CAutoPtr

생성자입니다.

CAutoPtr() throw();
explicit CAutoPtr(T* p) throw();

template<typename TSrc>
CAutoPtr(CAutoPtr<TSrc>& p) throw();

template<>
CAutoPtr(CAutoPtr<T>& p) throw();

매개 변수

p
기존 포인터입니다.

TSrc
현재 개체를 초기화하는 데 사용되는 다른 CAutoPtr형식에서 관리되는 형식입니다.

설명

개체는 CAutoPtr 기존 포인터를 사용하여 만들 수 있으며, 이 경우 포인터의 소유권을 이전합니다.

예시

개요의 예제를 CAutoPtr 참조하세요.

CAutoPtr::~CAutoPtr

소멸자입니다.

~CAutoPtr() throw();

설명

할당된 리소스를 해제합니다. CAutoPtr::Free.

CAutoPtr::Detach

포인터의 소유권을 해제하려면 이 메서드를 호출합니다.

T* Detach() throw();

반환 값

포인터의 복사본을 반환합니다.

설명

포인터의 소유권을 해제하고, 데이터 멤버 변수를 NULL로 설정하고 CAutoPtr::m_p , 포인터의 복사본을 반환합니다. 호출 Detach한 후에는 프로그래머가 개체가 이전에 책임을 맡았을 수 있는 CAutoPtr 할당된 리소스를 해제해야 합니다.

예시

개요의 예제를 CAutoPtr 참조하세요.

CAutoPtr::Free

이 메서드를 호출하여 .에서 가리키는 개체를 CAutoPtr삭제합니다.

void Free() throw();

설명

이 개체가 CAutoPtr 가리키는 개체가 해제되고 CAutoPtr::m_p 데이터 멤버 변수가 NULL로 설정됩니다.

CAutoPtr::m_p

포인터 데이터 멤버 변수입니다.

T* m_p;

설명

이 멤버 변수는 포인터 정보를 보유합니다.

CAutoPtr::operator =

할당 연산자입니다.

template<>
CAutoPtr<T>& operator= (CAutoPtr<T>& p);

template<typename TSrc>
CAutoPtr<T>& operator= (CAutoPtr<TSrc>& p);

매개 변수

p
포인터입니다.

TSrc
클래스 형식입니다.

반환 값

에 대한 참조를 반환합니다 CAutoPtr< T >.

설명

대입 연산자는 현재 포인터에서 개체를 CAutoPtr 분리하고 새 포인터 p를 해당 위치에 연결합니다.

예시

개요의 예제를 CAutoPtr 참조하세요.

CAutoPtr::operator ->

멤버에 대한 포인터 연산자입니다.

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

반환 값

데이터 멤버 변수의 CAutoPtr::m_p 값을 반환합니다.

설명

이 연산자를 사용하여 개체가 가리키는 클래스의 메서드를 호출합니다 CAutoPtr . 디버그 빌드에서 NULL을 가리키는 경우 CAutoPtr 어설션 오류가 발생합니다.

예시

개요의 예제를 CAutoPtr 참조하세요.

CAutoPtr::operator T*

캐스트 연산자입니다.

operator T* () const throw();

반환 값

클래스 템플릿에 정의된 개체 데이터 형식에 대한 포인터를 반환합니다.

예시

개요의 예제를 CAutoPtr 참조하세요.

참고 항목

CHeapPtr 클래스
CAutoVectorPtr 클래스
클래스 개요