共用方式為


刪除 CObject 集合中的所有物件

本文說明如何刪除集合中的所有物件 (不需刪除集合物件本身)。

若要刪除 集合 CObject 中的所有物件(或衍生自 CObject 的物件),您可以使用存取集合 中所有成員一文 中所述的反復專案技術,來接著刪除每個物件。

警告

集合中的物件可以共用。 也就是,集合會中保留物件指標,而程式的其他部分可能也有到同一物件的指標。 您必須留意不要刪除共用的物件,直到所有部分都已用完物件。

本文說明如何刪除物件於:

若要刪除 CObject 指標清單中的所有物件

  1. 使用 GetHeadPositionGetNext 逐一查看清單。

  2. delete使用 運算子來刪除反覆運算中遇到的每個物件。

  3. 在刪除與這些項目關聯的物件後,呼叫 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 會移除單一項目。

請留意刪除項目的物件和移除項目本身之間的差異。 從清單移除項目只會移除對物件的參考。 物件仍然存在於記憶體中。 當您刪除物件時,它就不會存在,且其記憶體會被回收。 因此,在項目物件已刪除後立即移除項目是很重要的,如此清單才不會嘗試存取不存在的物件。

若要刪除陣列中的所有專案

  1. 使用 GetSize 和整數索引值以逐一查看陣列。

  2. delete使用 運算子來刪除反覆運算中遇到的每個專案。

  3. 在刪除之後,呼叫 RemoveAll 函式以從陣列移除所有項目。

    用於刪除陣列中所有項目的程式碼如下所示:

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

如上述清單範例,您可以呼叫 RemoveAll 移除陣列中所有項目,或呼叫 RemoveAt 移除個別項目。

若要刪除對應中的所有專案

  1. 使用 GetStartPositionGetNextAssoc 逐一查看陣列。

  2. delete使用 運算子來刪除每個對應元素的索引鍵和/或值,因為它在反復專案中遇到。

  3. 在刪除之後,呼叫 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 的所有項目,以移除具有指定索引鍵的個別項目。

另請參閱

存取集合的所有成員