Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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.