Partager via


Suppression de tous les objets d’une collection CObject

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

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

Attention

Les objets au sein 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 sur le même objet. Vous devez alors veiller à ne pas supprimer un objet qui est partagé jusqu'à ce que toutes les parties aient fini d'utiliser l'objet.

Cet article explique comment supprimer des objets dans :

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

  1. Utilisez GetHeadPosition et GetNext pour parcourir la liste.

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

  3. Appelez la fonction RemoveAll pour supprimer tous les éléments dans la liste une fois que les objets associés à ces éléments ont été 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, RemoveAll, est une fonction membre de la liste qui supprime tous les éléments de la liste. La fonction membre RemoveAt supprime un élément.

Notez la différence entre supprimer l'élément d'un objet et supprimer l'élément lui-même. Supprimer un élément de la liste supprime uniquement la référence de la liste à l'objet. L'objet existe encore en mémoire. Lorsque vous supprimez un objet, il arrête d'exister et sa mémoire est libérée. Par conséquent, il est important de supprimer un élément dès que l'objet de l'élément a été supprimé afin que la liste ne tente 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 effectuer une itération au sein du tableau.

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

  3. Appelez la fonction RemoveAll pour supprimer tous les éléments du tableau après leur suppression.

    Le code pour supprimer 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 chaque élément un par un.

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

  1. Utilisez GetStartPosition et GetNextAssoc pour effectuer une itération au sein du 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 fonction RemoveAll pour supprimer tous les éléments du mappage après leur suppression.

    Le code pour supprimer tous les éléments d’une collection CMap est le suivant. Chaque élément du mappage a une chaîne en tant que clé et un objet CPerson (dérivé de CObject) en tant que 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'un mappage ou RemoveKey pour supprimer chaque élément avec la clé spécifiée.

Voir aussi

Accès à tous les membres d’une collection