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++ new
和 delete
運算符。 CAutoVectorPtr
與 CAutoPtr
類似,唯一的差異在於它會使用 向量 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
範例。