Smazání všech objektů v kolekcích CObject
Tento článek vysvětluje, jak odstranit všechny objekty v kolekci (bez odstranění samotného objektu kolekce).
Chcete-li odstranit všechny objekty v kolekci CObjects (nebo objektů, které jsou odvozeny z CObject), pomocí iterace technik popsaných v článku Přístup ke všem členům kolekce Chcete-li odstranit jednotlivé objekty zase.
Upozornění |
---|
Objekty do kolekce může být sdílena.To znamená kolekci uchovává ukazatel na objekt, ale ostatní součásti programu mohou být odkazy na stejný objekt.Musíte být opatrní, aby objekt, který je sdílen nedokončili všechny části pomocí objektu. |
Tento článek popisuje, jak odstranit objekty:
Seznam
Matice
Mapa
Chcete-li odstranit všechny objekty v seznamu ukazatelů pro třídy CObject
Použití GetHeadPosition a GetNext k iterování seznamu.
Použití Odstranit operátor každý objekt odstranit, jak je zaznamenána v iteraci.
Volat RemoveAll funkce pro odstranění všech prvků ze seznamu po odstranění objektů, které jsou přidružené k těmto prvkům.
Následující příklad ukazuje, jak odstranit všechny objekty ze seznamu CPerson objekty.Každý objekt v seznamu je ukazatel CPerson objekt, který byl původně přiděleny na haldě modulu.
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 seznam členská funkce, která odebere všechny prvky ze seznamu.Členské funkce RemoveAt odebere jeden prvek.
Povšimněte si rozdílu mezi odstraněním objektu prvku a odstranění samotného elementu.V seznamu odkaz na objekt pouze odstranit prvek ze seznamu odstraní.Objekt stále existuje v paměti.Při odstranění objektu jej přestane existovat a je uvolněn své paměti.Proto je důležité odstranit element ihned po prvku objekt byl odstraněn, takže se nebude pokoušet o přístup k objektům, které již existují v seznamu.
Chcete-li odstranit všechny prvky pole
Použití GetSize a celočíselné hodnoty indexu k iterovat přes pole.
Použití Odstranit provozovatel odstranění jednotlivých prvků jako je zaznamenána v iteraci.
Volat RemoveAll funkce pro odstranění všech prvků z pole poté, co byla odstraněna.
Odstranění všech prvků z pole kód vypadá takto:
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 k odstranění všech prvků v matici nebo RemoveAt k odebrání jednotlivých prvků.
Chcete-li odstranit všechny prvky v mapě
Použití GetStartPosition a GetNextAssoc k iterovat přes pole.
Použití Odstranit operátor jako při iterace odstranění klíče nebo hodnoty pro každý prvek mapy.
Volat RemoveAll funkce pro odstranění všech prvků z mapy poté, co byla odstraněna.
Kód pro odstranění všech prvků CMap kolekce je takto.Každý prvek v mapě má řetězec klíče 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 Chcete-li odebrat všechny prvky v mapě nebo RemoveKey Chcete-li odebrat jednotlivý prvek se zadaným klíčem.