CAutoPtr sınıfı
Bu sınıf, akıllı işaretçi nesnesini gösterir.
![]() |
---|
Bu sınıf ve üyeleri, Windows çalışma zamanında yürütmek uygulamalarda kullanılamaz. |
template<
typename T
>
class CAutoPtr
Parametreler
- T
İşaretçi türü.
Üyeler
Ortak Oluşturucusu
Ad |
Description |
---|---|
Oluşturucu. |
|
Yıkıcı. |
Public yöntemler
Ad |
Description |
---|---|
Varolan bir işaretçiyi sahipliğini almak için bu yöntemi çağırın. |
|
Bir işaretçi sahipliğini serbest bırakmak için bu yöntemi çağırın. |
|
Göre sıralanmasını bir nesneyi silmek için bu yöntemi çağırın bir CAutoPtr. |
Ortak İşleçler
Ad |
Description |
---|---|
Dönüþtürme iþleci. |
|
Atama işleci. |
|
İşaretçiyi üye işleci. |
Ortak veri üyeleri
Ad |
Description |
---|---|
İşaretçiyi veri üye değişkeni. |
Notlar
Bu sınıf oluşturma ve yönetme kapsam dışına düştüğünde otomatik olarak kaynakları azaltarak bellek sızıntıları karşı korunmasına yardımcı olacak bir akıllı işaretçi için yöntemler sağlar.
Daha fazla, CAutoPtrkopya yapıcı ve atama işleci transfer sahiplik hedef işaretçi kaynak İşaretçi İşaretçi kopyalama ve kaynak işaretçi null olarak ayarlama.Bu nedenle iki imkansız CAutoPtr her aynı işaretçi depolamak nesneleri ve bu iki kez aynı işaretçi silinmesi olasılığını azaltır.
CAutoPtrAyrıca işaretçiler topluluğu oluşturulmasını kolaylaştırır.Koleksiyon sýnýfýný türeyen ve yıkıcı yazmak yerine bir koleksiyonu yapmak daha basittir CAutoPtr nesneler.Koleksiyon silindiğinde, CAutoPtr nesneleri etki alanýnýn dýþýna çýkar ve kendilerini otomatik olarak sil.
CHeapPtr ve türevleri ile aynı şekilde CAutoPtr, ayırma ve boş Bellek Kaçağı farklı işlevleri C++ kullanarak dışında Yeni ve silmek operators.CAutoVectorPtr benzer şekilde, CAutoPtr, şu anda onu kullanan tek fark vektör yeni [ ve vektör silme [ ayırmak ve belleği boşaltmak için.
Ayrıca bkz: CAutoPtrArray ve CAutoPtrList ne zaman dizileri veya akıllı işaretçiler listeleri gereklidir.
Gereksinimler
Başlık: 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;
}