刪除 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
的所有項目,以移除具有指定索引鍵的個別項目。