刪除 CObject 集合中的所有物件
本文說明如何刪除集合中的所有物件 (不需刪除集合物件)。
要移除的 CObject集合的所有物件 (衍生自 CObject的或物件),請使用本文所述的其中一個反覆運算技術 存取集合的所有成員。 依次刪除每一個物件。
警告
集合中的物件可以共用。也就是集合中保留物件指標,不過,程式的其他部分可能也有指標到同一物件。您必須小心刪除使用物件,共用的物件,直到所有部分完成。
本文說明如何刪除物件在:
一個清單。
陣列
對應
刪除在指標清單中的所有物件至 CObject
使用 GetHeadPosition 和 GetNext 逐一查看清單。
使用 delete 運算子刪除每一個物件,它在反覆運算時。
在物件與這些項目刪除後,請呼叫 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 和整數索引值逐一查看陣列。
當它在反覆運算時,使用 delete 運算子刪除每一個項目。
在刪除之後,請呼叫 RemoveAll 函式可從陣列移除所有項目。
刪除陣列中所有的項目程式碼如下所示:
CArray<CPerson*, CPerson*> myArray; int i = 0; while (i < myArray.GetSize()) { delete myArray.GetAt(i++); } myArray.RemoveAll();
與上面的範例清單,您可以呼叫 RemoveAll 移除陣列或 RemoveAt 的所有項目移除個別項目。
刪除對應中的所有項目
使用 GetStartPosition 和 GetNextAssoc 逐一查看陣列。
使用 delete 運算子刪除索引鍵和值每個對應項目的,它在反覆運算時。
在刪除之後,請呼叫 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 的所有項目移除個別元素具有指定索引鍵的。