Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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, CAutoPtrsalin 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.