Aracılığıyla paylaş


CObject koleksiyonundaki tüm nesneleri silme

Bu makalede, bir topluluk içindeki tüm nesneleri (koleksiyon nesnesi olmadan) silme açıklar.

Topluluğu tüm nesneleri silmek için CObjects (veya türetilen nesneler CObject), makalede açıklanan yineleme tekniklerden birini kullanın Erişen tüm bir toplamanın üyeleri sırayla her nesneyi silmek için.

Uyarı notuUyarı

Koleksiyon nesneleri paylaşılabilir.Yani koleksiyon nesnesine bir işaretçi tutar, ancak program diğer bölümlerini işaretçiler aynı nesneye sahip olabilir.Tüm bölümleri nesnesini kullanarak bitinceye kadar paylaşılan nesne silmemeye olmalıdır.

Bu makalede nesneleri silmek gösterilmiştir:

  • Liste

  • Bir dizi

  • Harita

CObject işaretçiler listesindeki tüm nesneleri silmek için

  1. Use GetHeadPosition ve GetNext liste boyunca yineleme yapmak için.

  2. Use silmek tekrarda karşılaşıldığında gibi her nesneyi silmek için işleci.

  3. Call RemoveAll bu öğelerle ilişkili nesneleri sildikten sonra tüm öğeler listesinden kaldırmak için işlevi.

Aşağıdaki örnek, tüm nesneler listesinden silmek nasıl gösterir CPerson nesneler.Bir işaretçidir listesindeki her nesne bir CPerson başlangıçta öbek üzerinde ayrılmış olan nesne.

CTypedPtrList<CObList, CPerson*> myList;
CPerson* pPerson = new CPerson();
myList.AddHead(pPerson);
POSITION pos = myList.GetHeadPosition();

while(pos != NULL)
{
   delete myList.GetNext(pos);
}
myList.RemoveAll();     

Son işlev çağrısı RemoveAll, tüm öğeleri kaldırır liste üye işlevi.Üye işlevi RemoveAt tek bir öğeyi kaldırır.

Bir öðenin nesneyi silme ve kaldırma öğesi arasındaki fark.Listeden bir öğe kaldırma, yalnızca nesne listesinin başvuruyu kaldırır.Hala bellekte oluşmuştur.Bir nesneyi sildiğinizde, yok olur ve kendi bellek iadesi.Böylece, liste artık mevcut nesnelere erişmek denememesi hemen öğenin silindiği sonra bir öğeyi kaldırmak önemlidir.

Bir dizideki tüm öğeleri silmek için

  1. Use GetSize ve dizi boyunca yineleme yapmak için tamsayı dizin değeri.

  2. Kullanım silmek tekrarda karşılaşıldığında gibi her öğe silmek için işleci.

  3. Call RemoveAll işlevini silinmiş olup sonra diziden tüm öğeleri kaldırmak için.

    Bir dizinin tüm öğeleri silmek için kod aşağıdaki gibidir:

    CArray<CPerson*, CPerson*> myArray;
    
    int i = 0;
    while (i < myArray.GetSize())
    {
       delete myArray.GetAt(i++);
    }
    
    myArray.RemoveAll();        
    

Liste ile Yukarıdaki örnekte arayabileceğiniz gibi RemoveAll bir dizideki tüm öğeleri kaldırmak veya RemoveAt tek bir öğe kaldırmak için.

Bir harita tüm öğeleri silmek için

  1. Use GetStartPosition ve GetNextAssoc dizi boyunca yineleme yapmak için.

  2. Kullanım silmek tekrarda karşılaşıldığında gibi anahtar ve/veya harita her öğe için değerini silmek için işleci.

  3. Call RemoveAll işlevini silinmiş olup sonra haritadaki tüm öğeleri kaldırmak için.

    Tüm öğeleri silmek için kod bir CMap toplama aşağıdaki gibidir.Dize anahtarı olarak haritasında her öğe vardır ve bir CPerson nesne (türetilen CObject) değeri.

    CMap<CString, LPCTSTR, CPerson*, CPerson*> myMap;
    // ... Add some key-value elements ...
    // Now delete the elements
    POSITION pos = myMap.GetStartPosition();
    while(pos != NULL)
    {
       CPerson* pPerson;
       CString string;
       // Gets key (string) and value (pPerson)
       myMap.GetNextAssoc(pos, string, pPerson);
       delete pPerson;
    }
    // RemoveAll deletes the keys
    myMap.RemoveAll();      
    

Arayabileceğiniz RemoveAll haritada tüm öğeleri kaldırmak veya RemoveKey ile belirtilen anahtarı tek bir öğe kaldırmak için.

Ayrıca bkz.

Görevler

Tüm bir toplamanın üyeleri erişme