Partilhar via


Excluindo todos os objetos em uma coleção CObject

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

Para excluir todos os objetos em uma coleção de CObjects (ou objetos derivados de CObject), use uma das técnicas de iteração descritas no artigo Acessando todos os membros de uma coleção para excluir por sua vez cada objeto.

Aviso

Os objetos nas coleções podem ser compartilhados.Isto é, a coleção mantém um ponteiro para o objeto, mas outras partes do programa também podem ter ponteiros ao mesmo objeto.Você deve ter cuidado para não exclua um objeto que é compartilhado até que todas as partes para completar usar o objeto.

Este artigo mostra como excluir os objetos no:

  • Uma lista

  • Uma matriz

  • Um mapa

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

  1. Use GetHeadPosition e GetNext para iterar pela lista.

  2. Use o operador de delete para excluir cada objeto como está localizado na iteração.

  3. Chame a função de RemoveAll para remover todos os elementos da lista depois que os objetos associados aos elementos foram excluídos.

O exemplo a seguir mostra como excluir todos os objetos de uma lista de objetos de CPerson . Cada objeto na lista é um ponteiro para um objeto de CPerson que é atribuído originalmente 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 chamada de função last, RemoveAll, é uma função de membro da lista que remove todos os elementos na lista. A função de membro RemoveAt remove um único elemento.

Observe a diferença entre excluir o objeto de um elemento e remover o próprio dataitem. Removendo um elemento da lista remove então a lista de referência ao objeto. O objeto ainda existe na memória. Quando você exclui um objeto, deixar de existir e sua memória é recuperada. Assim, é importante remover um elemento imediatamente depois que o objeto foi excluído do elemento de forma que a lista não tente acessar os objetos que ainda não existirem.

Para excluir todos os elementos em uma matriz

  1. Use GetSize e valores de índice inteiro para iterar com a matriz.

  2. Use o operador de delete para excluir cada elemento como está localizado na iteração.

  3. Chame a função de RemoveAll para remover todos os elementos da matriz depois que foram 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 no exemplo na lista acima, você pode chamar RemoveAll para remover todos os elementos em uma matriz ou em RemoveAt para remover um elemento individual.

Para excluir todos os elementos em um mapa

  1. Use GetStartPosition e GetNextAssoc para iterar com a matriz.

  2. Use o operador de delete para excluir a chave e/ou o valor para cada elemento de mapa como está localizado na iteração.

  3. Chame a função de RemoveAll para remover todos os elementos do mapa depois que foram excluídos.

    O código para excluir todos os elementos de uma coleção de CMap é como segue. Cada elemento do mapa tem uma cadeia de caracteres como a chave e um objeto de CPerson (derivados 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 em RemoveKey para remover um elemento individual com a chave especificada.

Consulte também

Tarefas

Acessando todos os membros de uma coleção