刪除 CObject 集合中的所有物件
本文說明如何刪除集合中的所有物件 (但不刪除集合物件本身)。
若要刪除的集合中的所有物件CObjects (或衍生自物件的CObject),您可以使用本文所述的反覆項目技術之一存取集合的所有成員依次刪除每個物件。
警告 |
---|
共用集合內的物件。也就是說,該集合存放指標至物件,但程式其他部分,也可以用同一個物件的指標。您必須小心不要刪除物件,直到完成所有組件使用的物件共用。 |
本文將告訴您,如何刪除物件中:
清單
陣列
地圖
若要刪除指標 CObject 到清單中的所有物件
使用GetHeadPosition和GetNext來逐一查看清單。
使用刪除運算子來刪除反覆項目中所遇到的每個物件。
呼叫RemoveAll函式來擁有這些元件相關聯的物件已經被刪除後,從清單中移除所有項目。
下列範例示範如何刪除所有物件從一份CPerson物件。在清單中的每個物件是變數的指標, CPerson最初配置在堆積的物件。
CTypedPtrList<CObList, CPerson*> myList;
CPerson* pPerson = new CPerson();
myList.AddHead(pPerson);
POSITION pos = myList.GetHeadPosition();
while(pos != NULL)
{
delete myList.GetNext(pos);
}
myList.RemoveAll();
最後一個函數呼叫中, RemoveAll,是從清單中移除所有項目清單成員函式。成員函式RemoveAt移除單一項目。
請注意刪除項目的物件和移除項目本身之間的差異。從清單移除項目,只會移除該清單中的物件參考。此物件仍然存在於記憶體中。當您刪除物件時,存在就會消失,而回收其記憶體。因此,務必要使清單不會嘗試存取不存在的物件已刪除的項目物件之後,立即移除項目。
若要刪除陣列中的所有項目
使用GetSize ,並逐一查看陣列的整數索引值。
使用刪除運算子來刪除反覆項目中所遇到的每個項目。
呼叫RemoveAll函式來從陣列中移除所有項目之後已被刪除。
刪除所有項目陣列中的程式碼如下所示:
CArray<CPerson*, CPerson*> myArray; int i = 0; while (i < myArray.GetSize()) { delete myArray.GetAt(i++); } myArray.RemoveAll();
時,就可以使用清單上述範例中,呼叫RemoveAll在陣列中移除所有項目或RemoveAt移除個別的項目。
若要刪除的圖中的所有項目
使用GetStartPosition和GetNextAssoc來逐一查看陣列。
使用刪除所遇到的反覆項目中刪除機碼和 (或) 每個對應項目值的運算子。
呼叫RemoveAll函式來從對應中移除所有項目之後已被刪除。
刪除所有項目的程式碼CMap集合是,如下所示。在對應中的每個元素都為索引鍵的字串和CPerson物件 (衍生自CObject) 做為值。
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();
您可以呼叫RemoveAll對應中移除所有項目或RemoveKey若要移除具有指定索引鍵的個別項目。