CAutoPtr
kelas
Kelas ini mewakili objek penunjuk cerdas.
Penting
Kelas ini dan anggotanya tidak dapat digunakan dalam aplikasi yang dijalankan di Windows Runtime.
Sintaks
template <typename T>
class CAutoPtr
Parameter
T
Jenis penunjuk.
Anggota
Konstruktor Publik
Nama | Deskripsi |
---|---|
CAutoPtr::CAutoPtr |
Konstruktor. |
CAutoPtr::~CAutoPtr |
Destruktor. |
Metode Publik
Nama | Deskripsi |
---|---|
CAutoPtr::Attach |
Panggil metode ini untuk mengambil kepemilikan pointer yang ada. |
CAutoPtr::Detach |
Panggil metode ini untuk merilis kepemilikan pointer. |
CAutoPtr::Free |
Panggil metode ini untuk menghapus objek yang ditujukkan oleh CAutoPtr . |
Operator publik
Nama | Deskripsi |
---|---|
CAutoPtr::operator T* |
Operator cast. |
CAutoPtr::operator = |
Operator penugasan. |
CAutoPtr::operator -> |
Operator pointer-to-member. |
Anggota data publik
Nama | Deskripsi |
---|---|
CAutoPtr::m_p |
Variabel anggota data pointer. |
Keterangan
Kelas ini menyediakan metode untuk membuat dan mengelola pointer pintar. Pointer pintar membantu melindungi dari kebocoran memori dengan secara otomatis membebaskan sumber daya ketika berada di luar cakupan.
Selanjutnya, CAutoPtr
salin konstruktor dan operator penugasan mentransfer kepemilikan pointer, menyalin pointer sumber ke pointer tujuan dan mengatur pointer sumber ke NULL. Itu sebabnya tidak mungkin untuk memiliki dua CAutoPtr
objek yang masing-masing menyimpan pointer yang sama, dan mengurangi kemungkinan menghapus pointer yang sama dua kali.
CAutoPtr
juga menyederhanakan pembuatan koleksi pointer. Alih-alih mengambil kelas koleksi dan mengambil alih destruktor, lebih mudah untuk membuat kumpulan CAutoPtr
objek. Ketika koleksi dihapus, CAutoPtr
objek akan keluar dari cakupan dan secara otomatis menghapus diri mereka sendiri.
CHeapPtr
dan varian bekerja dengan cara yang sama seperti CAutoPtr
, kecuali bahwa mereka mengalokasikan dan membebaskan memori menggunakan fungsi tumpukan yang berbeda alih-alih C++ new
dan delete
operator. CAutoVectorPtr
mirip dengan CAutoPtr
, satu-satunya perbedaan adalah menggunakan vektor baru[] dan penghapusan vektor[] untuk mengalokasikan dan membebaskan memori.
Lihat juga CAutoPtrArray
dan CAutoPtrList
kapan array atau daftar penunjuk pintar diperlukan.
Persyaratan
Header: atlbase.h
Contoh
// 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
Panggil metode ini untuk mengambil kepemilikan pointer yang ada.
void Attach(T* p) throw();
Parameter
p
Objek CAutoPtr
akan mengambil kepemilikan penunjuk ini.
Keterangan
CAutoPtr
Ketika objek mengambil kepemilikan pointer, objek akan secara otomatis menghapus pointer dan data apa pun yang dialokasikan ketika keluar dari cakupan. Jika CAutoPtr::Detach
dipanggil, programmer kembali diberi tanggung jawab untuk membebaskan sumber daya yang dialokasikan.
Dalam build debug, kegagalan pernyataan akan terjadi jika CAutoPtr::m_p
anggota data saat ini menunjuk ke nilai yang ada; artinya, itu tidak sama dengan NULL.
Contoh
Lihat contoh di CAutoPtr
Gambaran Umum.
CAutoPtr::CAutoPtr
Konstruktor.
CAutoPtr() throw();
explicit CAutoPtr(T* p) throw();
template<typename TSrc>
CAutoPtr(CAutoPtr<TSrc>& p) throw();
template<>
CAutoPtr(CAutoPtr<T>& p) throw();
Parameter
p
Penunjuk yang ada.
TSrc
Jenis yang dikelola oleh yang lain CAutoPtr
, digunakan untuk menginisialisasi objek saat ini.
Keterangan
Objek CAutoPtr
dapat dibuat menggunakan pointer yang ada, dalam hal ini mentransfer kepemilikan pointer.
Contoh
Lihat contoh dalam gambaran CAutoPtr
umum.
CAutoPtr::~CAutoPtr
Destruktor.
~CAutoPtr() throw();
Keterangan
Membebaskan sumber daya yang dialokasikan. Panggilan CAutoPtr::Free
.
CAutoPtr::Detach
Panggil metode ini untuk merilis kepemilikan pointer.
T* Detach() throw();
Nilai hasil
Mengembalikan salinan pointer.
Keterangan
Merilis kepemilikan pointer, mengatur CAutoPtr::m_p
variabel anggota data ke NULL, dan mengembalikan salinan pointer. Setelah memanggil Detach
, terserah programmer untuk membebaskan sumber daya yang dialokasikan di mana CAutoPtr
objek mungkin sebelumnya bertanggung jawab.
Contoh
Lihat contoh dalam gambaran CAutoPtr
umum.
CAutoPtr::Free
Panggil metode ini untuk menghapus objek yang ditujukkan oleh CAutoPtr
.
void Free() throw();
Keterangan
Objek yang ditujukkan oleh CAutoPtr
dikosongkan, dan CAutoPtr::m_p
variabel anggota data diatur ke NULL.
CAutoPtr::m_p
Variabel anggota data pointer.
T* m_p;
Keterangan
Variabel anggota ini menyimpan informasi pointer.
CAutoPtr::operator =
Operator penugasan.
template<>
CAutoPtr<T>& operator= (CAutoPtr<T>& p);
template<typename TSrc>
CAutoPtr<T>& operator= (CAutoPtr<TSrc>& p);
Parameter
p
Sebuah pointer.
TSrc
Jenis kelas.
Nilai hasil
Mengembalikan referensi ke CAutoPtr< T >
.
Keterangan
Operator penugasan mencopot CAutoPtr
objek dari penunjuk saat ini dan melampirkan pointer baru, p
, di tempatnya.
Contoh
Lihat contoh dalam gambaran CAutoPtr
umum.
CAutoPtr::operator ->
Operator pointer-to-member.
T* operator->() const throw();
Nilai hasil
Mengembalikan nilai CAutoPtr::m_p
variabel anggota data.
Keterangan
Gunakan operator ini untuk memanggil metode di kelas yang diacu oleh CAutoPtr
objek. Dalam build debug, kegagalan pernyataan akan terjadi jika poin ke CAutoPtr
NULL.
Contoh
Lihat contoh di CAutoPtr
Gambaran Umum.
CAutoPtr::operator T*
Operator cast.
operator T* () const throw();
Nilai hasil
Mengembalikan penunjuk ke jenis data objek yang ditentukan dalam templat kelas.
Contoh
Lihat contoh dalam gambaran CAutoPtr
umum.