Usuwanie wszystkich obiektów z kolekcji CObject

W tym artykule wyjaśniono, jak usunąć wszystkie obiekty w zbiorze (bez usuwania samego obiektu kolekcji).

Aby usunąć wszystkie obiekty w kolekcji CObjects (lub obiektów pochodzące z CObject), korzystania z jednego z techniki iteracji, opisanej w artykule Dostęp do wszystkich członków kolekcji z kolei usunięcie każdego obiektu.

Informacje dotyczące przestrogiPrzestroga

Obiekty w kolekcje mogą być współużytkowane.Kolekcja zachowuje wskaźnik do obiektu, ale inne części programu może być również odsyłaczy do tego samego obiektu.Należy uważać, aby nie usunąć obiektu, który jest udostępniony do momentu zakończenia wszystkich części za pomocą obiektu.

Ten artykuł pokazuje, jak usunąć obiekty:

  • Lista

  • Tablica

  • Mapa

Aby usunąć wszystkie obiekty na liście wskaźników do CObject

  1. Użycie GetHeadPosition i GetNext umożliwia iteracyjne przeglądanie listy.

  2. Użycie usunąć operatora do usunięcia każdego obiektu jest to napotkanych w iteracji.

  3. Wywołanie RemoveAll funkcji, aby usunąć wszystkie elementy z listy po usunięciu obiektów skojarzonych z tymi elementami.

Poniższy przykład pokazuje, jak usunąć wszystkie obiekty z listy CPerson obiektów.Każdy obiekt na liście jest wskaźnik do CPerson obiekt, który został pierwotnie przydzieloną na stercie.

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

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

Ostatnie wywołanie funkcji RemoveAll, jest lista funkcji członka, który usuwa wszystkie elementy z listy.Element członkowski funkcja RemoveAt Usuwa pojedynczy element.

Należy zauważyć różnicę między usunięcie elementu obiektu i usunięcie samego elementu.Usunięcie elementu z listy jedynie usuwa listę odwołania do obiektu.Obiekt nadal istnieje w pamięci.Podczas usuwania obiektu przestaje istnieć, a jego pamięci jest odzyskane.Dlatego jest ważne, aby usunąć element, natychmiast po obiekt element został usunięty, aby lista nie będzie próbował uzyskać dostęp do obiektów, które już nie istnieją.

Aby usunąć wszystkie elementy w tablicy

  1. Użycie GetSize i całkowitą wartości indeksu do iteracji tablicy.

  2. Użycie usunąć operator usunąć każdego elementu, jak wystąpi w iteracji.

  3. Wywołanie RemoveAll funkcja służąca do usuwania wszystkich elementów z tablicy, po ich usunięciu.

    Usuwanie wszystkich elementów tablicy kod jest następująca:

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

Zgodnie z powyższym przykładzie listy, można wywołać RemoveAll do usunięcia wszystkich elementów w tablicy lub RemoveAt usunąć pojedynczy element.

Aby usunąć wszystkie elementy w postaci mapy

  1. Użycie GetStartPosition i GetNextAssoc do iteracji tablicy.

  2. Użycie usunąć operator usunąć klucz lub wartość dla każdego elementu mapy, jak wystąpi w iteracji.

  3. Wywołanie RemoveAll funkcji, aby usunąć wszystkie elementy z mapy po ich usunięciu.

    Kod do usuwania wszystkich elementów CMap kolekcji jest następująca.Każdy element na mapie ma ciąg jako klucz i CPerson obiektu (pochodzące z CObject) jako wartość.

    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();      
    

Można wywołać RemoveAll do usunięcia wszystkich elementów w mapie lub RemoveKey do usunięcia pojedynczego elementu z określonym kluczem.

Zobacz też

Zadania

Uzyskiwanie dostępu do wszystkich elementów członkowskich kolekcji