Partager via


Suppression de tous les objets dans une collection CObject

Cet article explique comment supprimer tous les objets d’une collection (sans supprimer l’objet de collection lui-même).

Pour supprimer tous les objets d’une collection de CObjects (ou d’objets dérivés de CObject), vous utilisez l’une des techniques d’itération décrites dans l’article Accès à tous les membres d’une collection pour supprimer successivement chaque objet.

Avertissement

Les objets des collections peuvent être partagés. Autrement dit, la collection conserve un pointeur vers l’objet, mais d’autres parties du programme peuvent également avoir des pointeurs vers le même objet. Vous devez veiller à ne pas supprimer un objet partagé tant que toutes les parties n’ont pas fini d’utiliser l’objet.

Cet article vous montre comment supprimer les objets dans :

Pour supprimer tous les objets d’une liste de pointeurs vers CObject

  1. Utilisez GetHeadPosition et GetNext pour itérer à travers la liste.

  2. Utilisez l’opérateur delete pour supprimer chaque objet tel qu’il est rencontré dans l’itération.

  3. Appelez la RemoveAll fonction pour supprimer tous les éléments de la liste une fois les objets associés à ces éléments supprimés.

L’exemple suivant montre comment supprimer tous les objets d’une liste d’objets CPerson . Chaque objet de la liste est un pointeur vers un objet CPerson qui a été initialement alloué sur le tas.

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

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

Le dernier appel de fonction, RemoveAllest une fonction membre de liste qui supprime tous les éléments de la liste. La fonction membre RemoveAt supprime un élément.

Notez la différence entre la suppression de l’objet d’un élément et la suppression de l’élément lui-même. La suppression d’un élément de la liste supprime simplement la référence de la liste à l’objet. L’objet existe toujours en mémoire. Lorsque vous supprimez un objet, il cesse d’exister et sa mémoire est récupérée. Par conséquent, il est important de supprimer un élément immédiatement après la suppression de l’objet de l’élément afin que la liste n’essaie pas d’accéder aux objets qui n’existent plus.

Pour supprimer tous les éléments d’un tableau

  1. Utilisez GetSize et des valeurs d’index entiers pour itérer à travers le tableau.

  2. Utilisez l’opérateur delete pour supprimer chaque élément tel qu’il est rencontré dans l’itération.

  3. Appelez la RemoveAll fonction pour supprimer tous les éléments du tableau une fois qu’ils ont été supprimés.

    Le code de suppression de tous les éléments d’un tableau est le suivant :

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

Comme dans l’exemple de liste ci-dessus, vous pouvez appeler RemoveAll pour supprimer tous les éléments d’un tableau ou RemoveAt pour supprimer un élément individuel.

Pour supprimer tous les éléments d’une carte

  1. Utilisez GetStartPosition et GetNextAssoc pour parcourir le tableau.

  2. Utilisez l’opérateur delete pour supprimer la clé et/ou la valeur de chaque élément de carte tel qu’il est rencontré dans l’itération.

  3. Appelez la RemoveAll fonction pour supprimer tous les éléments de la carte une fois qu’ils ont été supprimés.

    Le code de suppression de tous les éléments d’une CMap collection est le suivant. Chaque élément de la carte a une chaîne comme clé et un CPerson objet (dérivé de CObject) comme valeur.

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

Vous pouvez appeler RemoveAll pour supprimer tous les éléments d’une carte ou RemoveKey supprimer un élément individuel avec la clé spécifiée.

Voir aussi

Accès à tous les membres d’une collection