分享方式:


CAutoPtr 類別

這個類別代表智慧型手機針對象。

重要

這個類別及其成員不能用於在 Windows 執行階段 中執行的應用程式。

語法

template <typename T>
class CAutoPtr

參數

T
指標類型。

成員

公用建構函式

名稱 描述
CAutoPtr::CAutoPtr 建構函式。
CAutoPtr::~CAutoPtr 解構函式。

公用方法

名稱 描述
CAutoPtr::Attach 呼叫此方法以取得現有指標的擁有權。
CAutoPtr::Detach 呼叫此方法以釋放指標的擁有權。
CAutoPtr::Free 呼叫這個方法,以刪除 所 CAutoPtr指向的物件。

公用運算子

名稱 描述
CAutoPtr::operator T* 轉換運算元。
CAutoPtr::operator = 指派運算子。
CAutoPtr::operator -> 指針對成員運算符。

公用數據成員

名稱 描述
CAutoPtr::m_p 指標數據成員變數。

備註

這個類別提供建立和管理智慧型指標的方法。 智慧型指標可藉由在超出範圍時自動釋放資源,協助防止記憶體流失。

此外, CAutoPtr的複製建構函式和指派運算符會傳送指標的擁有權、將來源指標複製到目的地指標,並將來源指標設定為 NULL。 這就是為什麼不可能有兩個 CAutoPtr 對象分別儲存相同的指標,並降低刪除相同指標兩次的可能性。

CAutoPtr 也簡化了指標集合的建立。 與其衍生集合類別並覆寫解構函式,而是更容易建立 物件的集合 CAutoPtr 。 刪除集合時, CAutoPtr 物件將會超出範圍,並自動刪除自己。

CHeapPtr 和變體的運作方式 CAutoPtr與 相同,不同之處在於它們使用不同的堆積函式來配置和釋放記憶體,而不是C++ newdelete 運算符。 CAutoVectorPtrCAutoPtr類似,唯一的差異在於它會使用 向量 new[]vector delete[] 來配置和釋放記憶體。

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();

傳回值

傳回指標的複本。

備註

釋放指標的擁有權、將 CAutoPtr::m_p 數據成員變數設定為NULL,並傳回指標的複本。 呼叫 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 之類別中的方法。 在偵錯組建中,如果 CAutoPtr 指向 NULL,就會發生判斷提示失敗。

範例

請參閱概觀中的CAutoPtr範例。

CAutoPtr::operator T*

轉換運算元。

operator T* () const throw();

傳回值

傳回類別範本中定義之對象數據類型的指標。

範例

請參閱概觀中的CAutoPtr範例。

另請參閱

CHeapPtr 類別
CAutoVectorPtr 類別
類別概觀