共用方式為


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

請參閱

工作

存取集合的所有成員