Aracılığıyla paylaş


CAutoPtr sınıfı

Bu sınıf bir akıllı işaretçi nesnesini temsil eder.

Önemli

Bu sınıf ve üyeleri Windows Çalışma Zamanı yürütülen uygulamalarda kullanılamaz.

Sözdizimi

template <typename T>
class CAutoPtr

Parametreler

T
İşaretçi türü.

Üyeler

Ortak oluşturucular

Veri Akışı Adı Açıklama
CAutoPtr::CAutoPtr Oluşturucu.
CAutoPtr::~CAutoPtr Yok edici.

Genel yöntemler

Veri Akışı Adı Açıklama
CAutoPtr::Attach Mevcut bir işaretçinin sahipliğini almak için bu yöntemi çağırın.
CAutoPtr::Detach Bir işaretçinin sahipliğini serbest bırakmak için bu yöntemi çağırın.
CAutoPtr::Free tarafından CAutoPtrişaret edilen bir nesneyi silmek için bu yöntemi çağır.

Genel işleçler

Veri Akışı Adı Açıklama
CAutoPtr::operator T* Atama işleci.
CAutoPtr::operator = Atama işleci.
CAutoPtr::operator -> İşaretçiden üyeye işleci.

Genel veri üyeleri

Veri Akışı Adı Açıklama
CAutoPtr::m_p İşaretçi veri üye değişkeni.

Açıklamalar

Bu sınıf, akıllı işaretçi oluşturmak ve yönetmek için yöntemler sağlar. Akıllı işaretçiler, kapsam dışında kalan kaynakları otomatik olarak boşaltarak bellek sızıntılarına karşı korumaya yardımcı olur.

Ayrıca, CAutoPtrkopya oluşturucu ve atama işleci işaretçinin sahipliğini aktarır, kaynak işaretçiyi hedef işaretçiye kopyalar ve kaynak işaretçiyi NULL olarak ayarlar. Bu nedenle her birinin aynı işaretçiyi depolayan iki CAutoPtr nesne olması mümkün değildir ve aynı işaretçiyi iki kez silme olasılığını azaltır.

CAutoPtr ayrıca işaretçi koleksiyonlarının oluşturulmasını basitleştirir. Bir koleksiyon sınıfını türetmek ve yıkıcıyı geçersiz kılmak yerine, bir nesne koleksiyonu CAutoPtr oluşturmak daha kolaydır. Koleksiyon silindiğinde, CAutoPtr nesneler kapsam dışına çıkar ve kendilerini otomatik olarak siler.

CHeapPtr ve varyantları ile aynı şekilde CAutoPtrçalışır, ancak C++ new ve işleçler yerine farklı yığın işlevlerini kullanarak bellek ayırır ve delete boşaltırlar. CAutoVectorPtrile benzerdirCAutoPtr. Tek fark, bellek ayırmak ve boşaltmak için vector new[] ve vector delete[] kullanmasıdır.

Ayrıca akıllı CAutoPtrList işaretçi dizilerinin veya listelerinin ne zaman gerekli olduğunu da CAutoPtrArray görün.

Gereksinimler

Üst bilgi: atlbase.h

Örnek

// 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

Mevcut bir işaretçinin sahipliğini almak için bu yöntemi çağırın.

void Attach(T* p) throw();

Parametreler

p
CAutoPtr Nesnesi bu işaretçinin sahipliğini alır.

Açıklamalar

Bir CAutoPtr nesne işaretçinin sahipliğini aldığında, kapsam dışına çıktığında işaretçiyi ve ayrılan verileri otomatik olarak siler. Çağrılırsa CAutoPtr::Detach , programcıya ayrılan kaynakların serbest bırakıldıkları için yeniden sorumluluk verilir.

Hata ayıklama derlemelerinde, veri üyesi şu anda mevcut bir değere işaret ederse CAutoPtr::m_p , yani NULL'a eşit değilse onay hatası oluşur.

Örnek

Genel Bakış'taki örne CAutoPtr bakın.

CAutoPtr::CAutoPtr

Oluşturucu.

CAutoPtr() throw();
explicit CAutoPtr(T* p) throw();

template<typename TSrc>
CAutoPtr(CAutoPtr<TSrc>& p) throw();

template<>
CAutoPtr(CAutoPtr<T>& p) throw();

Parametreler

p
Mevcut bir işaretçi.

TSrc
Geçerli nesneyi başlatmak için kullanılan başka bir CAutoPtrtarafından yönetilen tür.

Açıklamalar

Nesne CAutoPtr , mevcut bir işaretçi kullanılarak oluşturulabilir ve bu durumda işaretçinin sahipliğini aktarır.

Örnek

Genel bakış'taki örne CAutoPtr bakın.

CAutoPtr::~CAutoPtr

Yok edici.

~CAutoPtr() throw();

Açıklamalar

Ayrılan tüm kaynakları serbesttir. CAutoPtr::Free çağrısı yapar.

CAutoPtr::Detach

Bir işaretçinin sahipliğini serbest bırakmak için bu yöntemi çağırın.

T* Detach() throw();

Dönüş değeri

İşaretçinin bir kopyasını döndürür.

Açıklamalar

bir işaretçinin sahipliğini serbest bırakır, veri üyesi değişkenini CAutoPtr::m_p NULL olarak ayarlar ve işaretçinin bir kopyasını döndürür. çağrısından Detachsonra, nesnenin daha önce sorumluluk üstlenmiş olabileceği ayrılmış kaynakları serbest getirmek programcıya CAutoPtr aittir.

Örnek

Genel bakış'taki örne CAutoPtr bakın.

CAutoPtr::Free

tarafından CAutoPtrişaret edilen bir nesneyi silmek için bu yöntemi çağır.

void Free() throw();

Açıklamalar

tarafından CAutoPtr işaret edilen nesne serbesttir ve CAutoPtr::m_p veri üyesi değişkeni NULL olarak ayarlanır.

CAutoPtr::m_p

İşaretçi veri üye değişkeni.

T* m_p;

Açıklamalar

Bu üye değişkeni işaretçi bilgilerini tutar.

CAutoPtr::operator =

Atama işleci.

template<>
CAutoPtr<T>& operator= (CAutoPtr<T>& p);

template<typename TSrc>
CAutoPtr<T>& operator= (CAutoPtr<TSrc>& p);

Parametreler

p
İşaretçi.

TSrc
Sınıf türü.

Dönüş değeri

bir başvuru CAutoPtr< T >döndürür.

Açıklamalar

Atama işleci nesneyi herhangi bir geçerli işaretçiden ayırır CAutoPtr ve yerine yeni işaretçiyi ekler p.

Örnek

Genel bakış'taki örne CAutoPtr bakın.

CAutoPtr::operator ->

İşaretçiden üyeye işleci.

T* operator->() const throw();

Dönüş değeri

Veri üyesi değişkeninin CAutoPtr::m_p değerini döndürür.

Açıklamalar

Nesne tarafından CAutoPtr işaret edilen bir sınıftaki bir yöntemi çağırmak için bu işleci kullanın. Hata ayıklama derlemelerinde, NULL'a işaret ederse CAutoPtr onay hatası oluşur.

Örnek

Genel Bakış'taki örne CAutoPtr bakın.

CAutoPtr::operator T*

Atama işleci.

operator T* () const throw();

Dönüş değeri

Sınıf şablonunda tanımlanan nesne veri türüne bir işaretçi döndürür.

Örnek

Genel bakış'taki örne CAutoPtr bakın.

Ayrıca bkz.

CHeapPtr sınıfı
CAutoVectorPtr sınıfı
Sınıfa genel bakış