Sdílet prostřednictvím


Odstranění všech objektů v kolekci CObject

Tento článek vysvětluje, jak odstranit všechny objekty v kolekci (bez odstranění samotného objektu kolekce).

Odstranit všechny objekty v kolekci CObjects (nebo objektů z CObject), pomocí iterace technik popsaných v článku Přístup ke všem členům kolekce zase každý objekt odstranit.

Poznámka k upozorněníUpozornění

Kolekce objektů lze sdílet.Je kolekce ponechá ukazatel na objekt, ale další součásti programu mohou mít také ukazatele na stejný objekt.Musíte být pozor, abyste objekt, který je sdílen až do dokončení všech částí pomocí objektu.

Tento článek popisuje, jak odstranit objekty:

  • Seznam

  • Matice

  • Mapa

Odstranit všechny objekty v seznamu ukazatelů pro CObject

  1. Použití GetHeadPosition a GetNext k iteraci v seznamu.

  2. Použití Odstranit operátor jako při iterace každý objekt odstranit.

  3. Volání RemoveAll funkci ze seznamu odebrat všechny prvky po odstranění objektů souvisejících s těmito prvky.

Následující příklad ukazuje, jak odstranit všechny objekty ze seznamu CPerson objektů.Každý objekt v seznamu je ukazatel na CPerson objektu, která byla původně přidělena na haldy.

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

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

Poslední volání funkce RemoveAll, je funkce seznamu členů, která odstraní ze seznamu všechny prvky.Členské funkce RemoveAt odebere jeden prvek.

Všimněte si rozdílu mezi odstranění objektu prvku a odebrání prvku samotném.V seznamu odkaz na objekt pouze odebráním prvek ze seznamu odebere.Objekt stále existuje v paměti.Při odstraňování objektu přestane existovat a její paměti je uvolněno.Je tedy důležité odebrat prvek po prvku objekt byl odstraněn, takže seznam nebude snažit přístup k objektům, které již neexistují.

Odstranit všechny prvky matice

  1. Použití GetSize a celočíselné hodnoty indexu lze iterovat matice.

  2. Použití Odstranit operátor jako při iterace odstranit každý prvek.

  3. Volání RemoveAll funkce odebrat všechny prvky z pole po byly odstraněny.

    Kód pro odstranění všech prvků matice je následující:

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

Jak se výše uvedený příklad seznamu volání RemoveAll odebrat všechny prvky v matici nebo RemoveAt odebrání jednotlivých prvků.

Odstranit všechny prvky v mapě

  1. Použití GetStartPosition a GetNextAssoc k iterování matice.

  2. Použití Odstranit operátor jako při iterace odstranit klíč nebo hodnotu pro každý prvek mapy.

  3. Volání RemoveAll funkce odebrat všechny prvky z mapy po byly odstraněny.

    Kód pro odstranění všech prvků CMap kolekce je takto.Každý prvek v mapě má řetězec jako klíč a CPerson objektu (odvozené z CObject) jako hodnotu.

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

Můžete volat RemoveAll odebrat všechny prvky v mapě nebo RemoveKey odebrat jednotlivý prvek se zadaným klíčem.

Viz také

Úkoly

Přístup ke všem členům kolekce