Share via


Löschen aller Objekte in einer CObject-Sammlung

In diesem Artikel wird erläutert, wie sie alle Objekte in einer Auflistung löschen (ohne das Auflistungsobjekt selbst zu löschen).

Wenn Sie alle Objekte in einer Auflistung von CObjectObjekten (oder von Objekten abgeleitet CObject) löschen möchten, verwenden Sie eine der Iterationstechniken, die im Artikel "Zugreifen auf alle Elemente einer Auflistung " beschrieben sind, um jedes Objekt wiederum zu löschen.

Achtung

Objekte in Auflistungen können freigegeben werden. Das heißt, die Auflistung hält einen Zeiger auf das Objekt, aber andere Teile des Programms können auch Zeiger auf dasselbe Objekt haben. Sie müssen vorsichtig sein, ein Objekt zu löschen, das freigegeben wird, bis alle Teile das Objekt verwendet haben.

In diesem Artikel erfahren Sie, wie Sie die Objekte löschen in:

So löschen Sie alle Objekte in einer Liste von Zeigern auf CObject

  1. Verwenden GetHeadPosition Und GetNext durchlaufen Sie die Liste.

  2. Verwenden Sie den delete Operator, um jedes Objekt zu löschen, wie es in der Iteration auftritt.

  3. Rufen Sie die RemoveAll Funktion auf, um alle Elemente aus der Liste zu entfernen, nachdem die mit diesen Elementen verknüpften Objekte gelöscht wurden.

Das folgende Beispiel zeigt, wie alle Objekte aus einer Liste von CPerson Objekten gelöscht werden. Jedes Objekt in der Liste ist ein Zeiger auf ein CPerson Objekt, das ursprünglich für den Heap zugewiesen wurde.

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

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

Der letzte Funktionsaufruf ist eine Listenelementfunktion, RemoveAlldie alle Elemente aus der Liste entfernt. Die Memberfunktion RemoveAt entfernt ein einzelnes Element.

Beachten Sie den Unterschied zwischen dem Löschen des Objekts eines Elements und dem Entfernen des Elements selbst. Durch das Entfernen eines Elements aus der Liste wird lediglich der Verweis auf das Objekt entfernt. Das Objekt ist weiterhin im Arbeitsspeicher vorhanden. Wenn Sie ein Objekt löschen, wird es nicht mehr vorhanden, und sein Speicher wird wieder beansprucht. Daher ist es wichtig, ein Element unmittelbar nach dem Löschen des Elements zu entfernen, damit die Liste nicht mehr versucht, auf Objekte zuzugreifen, die nicht mehr vorhanden sind.

So löschen Sie alle Elemente in einem Array

  1. Verwenden Und GetSize ganzzahlige Indexwerte zum Durchlaufen des Arrays.

  2. Verwenden Sie den delete Operator, um jedes Element zu löschen, wie es in der Iteration auftritt.

  3. Rufen Sie die RemoveAll Funktion auf, um alle Elemente aus dem Array zu entfernen, nachdem sie gelöscht wurden.

    Der Code zum Löschen aller Elemente eines Arrays lautet wie folgt:

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

Wie im obigen Listenbeispiel können Sie aufrufen RemoveAll , um alle Elemente in einem Array zu entfernen oder RemoveAt ein einzelnes Element zu entfernen.

So löschen Sie alle Elemente in einer Karte

  1. Verwenden GetStartPosition Und GetNextAssoc durchlaufen Sie das Array.

  2. Verwenden Sie den delete Operator, um den Schlüssel und/oder Wert für jedes Kartenelement zu löschen, wie es in der Iteration auftritt.

  3. Rufen Sie die RemoveAll Funktion auf, um alle Elemente aus der Karte zu entfernen, nachdem sie gelöscht wurden.

    Der Code zum Löschen aller Elemente einer CMap Auflistung lautet wie folgt. Jedes Element in der Karte weist eine Zeichenfolge als Schlüssel und ein CPerson Objekt (abgeleitet von CObject) als Wert auf.

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

Sie können aufrufen RemoveAll , um alle Elemente in einer Karte zu entfernen oder RemoveKey ein einzelnes Element mit dem angegebenen Schlüssel zu entfernen.

Siehe auch

Zugreifen auf alle Elemente einer Auflistung