Excluir todos os objetos em uma coleção CObject

Este artigo explica como excluir todos os objetos de uma coleção (sem excluir o objeto da coleção).

Para excluir todos os objetos em uma coleção de CObjects. (ou de objetos derivados CObject), você usa uma das técnicas iteração descritas no artigo Acessar todos os membros de uma coleção para excluir cada objeto sucessivamente.

Cuidado:

Objetos nas coleções podem ser compartilhados.Ou seja, a coleção mantém um ponteiro para o objeto, mas outras partes do ma programa y também têm ponteiros para o mesmo objeto.Você deve ter cuidado para não excluir um objeto compartilhado até que todas as partes tenham terminado de usar o objeto.

Este artigo mostra como excluir os objetos em:

  • Uma lista

  • Uma matriz

  • Um MAP

Para excluir todos os objetos em uma lista de ponteiros para CObject

  1. Use GetHeadPosition e GetNext para iterar através da lista.

  2. Use o Excluir operador para excluir cada objeto sistema autônomo é encontrado na iteração.

  3. telefonar the RemoveAll função para remover todos os elementos da lista após a exclusão de objetos associados a esses elementos.

O exemplo a seguir mostra como excluir todos os objetos em uma lista de CPerson objetos. Cada objeto na lista é um ponteiro para um CPerson objeto que foi originalmente alocado no heap.

CTypedPtrList<CObList, CPerson*> myList;
CPerson* pPerson = new CPerson();
myList.AddHead(pPerson);
POSITION pos = myList.GetHeadPosition();

while(pos != NULL)
{
   delete myList.GetNext(pos);
}
myList.RemoveAll();     

A última telefonar de função, RemoveAll, é uma função de membro da lista que remove todos os elementos da lista. A função de membro RemoveAt Remove um único elemento.

Observe a diferença entre excluir objeto de um elemento e remover o elemento propriamente dito.A remoção de um elemento da lista simplesmente remove referência da lista ao objeto.O objeto ainda existe na memória.Quando você exclui um objeto, ele deixa de existir e a memória é recuperada.Portanto, é importante remover um elemento imediatamente depois objeto do elemento de foi excluído para que a lista não tente acessar objetos que não existem mais.

Para excluir todos os elementos de uma matriz

  1. Use GetSize e valores de índice inteiro para iterar por meio do array.

  2. Use o Excluir operador para excluir cada elemento sistema autônomo é encontrado na iteração.

  3. telefonar the RemoveAll função para remover todos os elementos da matriz após ter sido excluídos.

    O código para excluir todos sistema autônomo elementos de uma matriz é o seguinte:

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

sistema autônomo no exemplo de lista acima, você pode telefonar RemoveAll Para remover todos sistema autônomo elementos em uma matriz ou RemoveAt Para remover um elemento individual.

Para excluir todos os elementos em um MAP

  1. Use GetStartPosition e GetNextAssoc para iterar por meio do array.

  2. Use o Excluir operador para excluir a chave e/ou o valor para cada elemento do MAP que for encontrado na iteração.

  3. telefonar the RemoveAll função para remover todos os elementos do MAP após ter sido excluídos.

    O código para excluir todos sistema autônomo elementos de um CMap coleção é o seguinte: Cada elemento no MAP tem uma seqüência de caracteres sistema autônomo a chave e um CPerson objeto (derivado de CObject) sistema autônomo o valor.

    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();      
    

Você pode telefonar RemoveAll Para remover todos os elementos em um MAP ou RemoveKey Para remover um elemento individual com a chave especificada.

Consulte também

Tarefas

Acessar todos os membros de uma coleção