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 CAutoPtr iş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, CAutoPtr
kopya 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. CAutoVectorPtr
ile 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 CAutoPtr
tarafı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 Detach
sonra, 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 CAutoPtr
iş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.