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
작동합니다. CAutoVectorPtr
CAutoPtr
는 벡터 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
참조하세요.