Compartilhar via


Excluir todos os objetos em uma coleção CObject

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

Para excluir todos os objetos em uma coleção de CObjects (ou de objetos derivada CObject), use uma das técnicas de iteração descritas no artigo Acesso a todos os membros de uma coleção para excluir cada objeto sucessivamente.

Observação de cuidadoCuidado

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

Este artigo mostra como excluir os objetos em:

  • Uma lista

  • Uma matriz

  • Um mapa

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

  1. Use GetHeadPosition e GetNext para percorrer a lista.

  2. Use o Excluir operador excluir cada objeto que é encontrado na iteração.

  3. Chamar o RemoveAll função para remover todos os elementos da lista após os objetos associados a esses elementos foram excluídos.

O exemplo a seguir mostra como excluir todos os objetos de uma lista de CPerson objetos.Cada objeto da 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();     

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

Observe a diferença entre excluir objeto do elemento e remover o elemento propriamente dito.Removendo um elemento da lista simplesmente remove a referência da lista do objeto.O objeto ainda existe na memória.Quando você exclui um objeto, ele deixa de existir e sua memória é recuperada.Assim, é importante remover um elemento imediatamente depois que o objeto do elemento 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 através da matriz.

  2. Use o Excluir operador excluir cada elemento é encontrado na iteração.

  3. Chamar o RemoveAll função para remover todos os elementos da matriz depois de ter sido excluídos.

    O código para excluir todos os elementos de uma matriz é a seguinte:

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

Como exemplo de lista acima, você pode chamar RemoveAll para remover todos os elementos em uma matriz ou RemoveAt para remover um elemento individual.

Para excluir todos os elementos em um mapa

  1. Use GetStartPosition e GetNextAssoc para iterar através da matriz.

  2. Use o Excluir operador delete a chave e/ou o valor para cada elemento do mapa como é encontrado na iteração.

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

    O código para excluir todos os elementos de um CMap coleção é o seguinte.Cada elemento no mapa tem uma string como chave e um CPerson objeto (derivado de CObject) como 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 chamar RemoveAll para remover todos os elementos em um mapa ou RemoveKey para remover um elemento individual com a chave especificada.

Consulte também

Tarefas

Acessar todos os membros de uma coleção