次の方法で共有


CObject コレクションの全オブジェクトの削除

この技術情報では、コレクションのすべてのオブジェクトを削除する方法について説明します (コレクション オブジェクト自体の削除せずに)。

オブジェクトの CObjectの秒のコレクションのすべてのオブジェクト ( CObjectから派生)または削除するには、各オブジェクトを順番に削除する技術情報 コレクションのすべてのメンバーのアクセス で説明されているイテレーションの手法の 1 つを使用します。

Caution メモ注意

コレクションのオブジェクトは共有できます。つまり、コレクションはオブジェクトへのポインターを保持していますほかの一部は、同じオブジェクトへのポインターを持つ場合があります。パーツがオブジェクトを使用して終了するまで共有されるオブジェクトを削除しないように注意する必要があります。

この技術情報では、オブジェクトを削除する方法を示します:

  • リスト

  • 配列

  • マップ

CObject へのポインターのリストのすべてのオブジェクトを削除するには

  1. リストを反復処理するために GetHeadPositionGetNext を使用します。

  2. イテレーションにあるように、各オブジェクトを削除するに 削除(&&D),削除,DELETE,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. イテレーションにあるように、各要素を削除するに 削除(&&D),削除,DELETE,Delete 演算子を使用します。

  3. これらの削除後配列のすべての要素を削除するに RemoveAll 関数を呼び出します。

    配列のすべての要素を削除するコードは次のとおりです。:

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

一覧の上の例と同様に、個別の要素を削除する配列または RemoveAt のすべての要素を削除するように RemoveAll をダイヤルできます。

マップのすべての要素を削除するには

  1. 配列を反復処理するために GetStartPositionGetNextAssoc を使用します。

  2. イテレーションにあるように、各マップ要素のキーと値を削除するに 削除(&&D),削除,DELETE,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();      
    

指定されたキーと個々の要素を削除するにマップまたは RemoveKey のすべての要素を削除するように RemoveAll をダイヤルできます。

参照

処理手順

コレクションの全メンバーへのアクセス