Bagikan melalui


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, 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.

Baca juga

CHeapPtr class
CAutoVectorPtr class
Gambaran umum kelas