Condividi tramite


Eliminazione di tutti gli oggetti in una raccolta CObject

Questo articolo illustra come eliminare tutti gli oggetti in una raccolta (senza eliminare l'oggetto raccolta stesso).

Per eliminare tutti gli oggetti in una raccolta di CObjectoggetti (o di oggetti derivati da CObject), utilizzare una delle tecniche di iterazione descritte nell'articolo Accesso a tutti i membri di un insieme per eliminare ogni oggetto a sua volta.

Attenzione

Gli oggetti nelle raccolte possono essere condivisi. Ovvero, la raccolta mantiene un puntatore all'oggetto, ma anche altre parti del programma possono avere puntatori allo stesso oggetto. È necessario prestare attenzione a non eliminare un oggetto condiviso fino a quando tutte le parti non sono state completate utilizzando l'oggetto .

Questo articolo illustra come eliminare gli oggetti in:

Per eliminare tutti gli oggetti in un elenco di puntatori a CObject

  1. Usare GetHeadPosition e GetNext per scorrere l'elenco.

  2. Usare l'operatore delete per eliminare ogni oggetto durante l'iterazione.

  3. Chiamare la RemoveAll funzione per rimuovere tutti gli elementi dall'elenco dopo l'eliminazione degli oggetti associati a tali elementi.

Nell'esempio seguente viene illustrato come eliminare tutti gli oggetti da un elenco di CPerson oggetti . Ogni oggetto nell'elenco è un puntatore a un CPerson oggetto originariamente allocato nell'heap.

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

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

L'ultima chiamata di funzione, RemoveAll, è una funzione membro di elenco che rimuove tutti gli elementi dall'elenco. La funzione RemoveAt membro rimuove un singolo elemento.

Si noti la differenza tra l'eliminazione dell'oggetto di un elemento e la rimozione dell'elemento stesso. La rimozione di un elemento dall'elenco rimuove semplicemente il riferimento dell'elenco all'oggetto . L'oggetto esiste ancora in memoria. Quando si elimina un oggetto, smette di esistere e la relativa memoria viene recuperata. È quindi importante rimuovere un elemento immediatamente dopo l'eliminazione dell'oggetto dell'elemento in modo che l'elenco non tenti di accedere agli oggetti che non esistono più.

Per eliminare tutti gli elementi in una matrice

  1. Usare GetSize e valori di indice integer per scorrere la matrice.

  2. Usare l'operatore delete per eliminare ogni elemento durante l'iterazione.

  3. Chiamare la RemoveAll funzione per rimuovere tutti gli elementi dalla matrice dopo l'eliminazione.

    Il codice per eliminare tutti gli elementi di una matrice è il seguente:

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

Come nell'esempio di elenco precedente, è possibile chiamare RemoveAll per rimuovere tutti gli elementi in una matrice o RemoveAt per rimuovere un singolo elemento.

Per eliminare tutti gli elementi in una mappa

  1. Usare GetStartPosition e GetNextAssoc per scorrere la matrice.

  2. Usare l'operatore delete per eliminare la chiave e/o il valore per ogni elemento della mappa durante l'iterazione.

  3. Chiamare la RemoveAll funzione per rimuovere tutti gli elementi dalla mappa dopo l'eliminazione.

    Il codice per eliminare tutti gli elementi di una CMap raccolta è il seguente. Ogni elemento della mappa ha una stringa come chiave e un CPerson oggetto (derivato da CObject) come valore.

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

È possibile chiamare RemoveAll per rimuovere tutti gli elementi in una mappa o RemoveKey per rimuovere un singolo elemento con la chiave specificata.

Vedi anche

Accesso a tutti i membri di una raccolta