Usuwanie wszystkich obiektów w 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 obiekty pochodzące z CObject), jest używany jeden z techniki iteracji, opisane w artykule Dostęp do wszystkich członków kolekcji z kolei usunięcie każdego obiektu.
![]() |
---|
Obiekty w kolekcje mogą być współużytkowane.Oznacza to kolekcja zachowuje wskaźnik do obiektu, ale innych części programu może również mieć wskaźniki do tego samego obiektu.Należy zachować ostrożność, aby nie usunąć obiekt, który jest udostępniony do momentu zakończenia wszystkich części obiektu. |
W tym artykule przedstawiono sposób usunąć obiekty w:
Lista
Tablica
Mapa
Aby usunąć wszystkie obiekty na liście wskaźników do CObject
Użyj GetHeadPosition i GetNext do iteracji listy.
Użyj usunąć operatora do usunięcia każdego obiektu, jak jest on napotkanych w iteracji.
Wywołanie RemoveAll funkcji, aby usunąć wszystkie elementy z listy po usunięciu obiektów skojarzonych z tymi elementami.
Poniższy przykład ilustruje sposób usunąć wszystkie obiekty z listy CPerson obiektów.Każdy obiekt na liście jest wskaźnik do CPerson obiektu, która pierwotnie została przydzielona 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, funkcja Członkowskie listy usuwa wszystkie elementy z listy.Funkcja Członkowskie RemoveAt Usuwa pojedynczy element.
Należy zauważyć różnicę między usunięcie elementu obiektu i usuwanie 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ć i odzyskane w jego pamięci.Dlatego jest ważne, aby usunąć element, natychmiast po elementu obiekt został usunięty, tak aby listy nie będzie próbować dostępu do obiektów, które już istnieją.
Aby usunąć wszystkie elementy tablicy
Użyj GetSize i całkowitą wartości indeksu do iteracji w tablicy.
Użyj usunąć operatora do usunięcia każdego elementu, jak jest on napotkanych w iteracji.
Wywołanie RemoveAll funkcji, aby usunąć wszystkie elementy z tablicy, po ich usunięciu.
Kod do usuwania wszystkich elementów tablicy jest następująca:
CArray<CPerson*, CPerson*> myArray; int i = 0; while (i < myArray.GetSize()) { delete myArray.GetAt(i++); } myArray.RemoveAll();
Jak w powyższym przykładzie listy można wywołać RemoveAll do usunięcia wszystkich elementów w tablicy lub RemoveAt do usunięcia poszczególnych elementów.
Aby usunąć wszystkie elementy na mapie
Użyj GetStartPosition i GetNextAssoc do iteracji w tablicy.
Użyj usunąć operatora, aby usunąć klucz lub wartość dla każdego elementu mapy jak napotkania się w iteracji.
Wywołanie RemoveAll funkcji, aby usunąć wszystkie elementy z mapy, po ich usunięciu.
Usuwanie wszystkich elementów kodu CMap kolekcji jest następująca.Każdy element w mapie ma ciągu 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 na mapie lub RemoveKey do usunięcia pojedynczego elementu z określonym kluczem.