CObject 컬렉션의 모든 개체 삭제
이 문서에서는 컬렉션 개체 자체를 삭제하지 않고 컬렉션의 모든 개체를 삭제하는 방법을 설명합니다.
컬렉션의 CObject
모든 개체(또는 파생된 개체)를 삭제하려면 컬렉션의 모든 구성원에 액세스하는 문서에 설명된 CObject
반복 기술 중 하나를 사용하여 각 개체를 차례로 삭제합니다.
주의
컬렉션의 개체를 공유할 수 있습니다. 즉, 컬렉션은 개체에 대한 포인터를 유지하지만 프로그램의 다른 부분에도 동일한 개체에 대한 포인터가 있을 수 있습니다. 모든 파트가 개체 사용을 완료할 때까지 공유되는 개체를 삭제하지 않도록 주의해야 합니다.
이 문서에서는 다음에서 개체를 삭제하는 방법을 보여줍니다.
CObject에 대한 포인터 목록의 모든 개체를 삭제하려면
GetNext
목록을 사용하고GetHeadPosition
반복합니다.연산자를
delete
사용하여 반복에서 발견된 각 개체를 삭제합니다.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
는 단일 요소를 제거합니다.
요소의 개체 삭제와 요소 자체 제거의 차이점을 확인합니다. 목록에서 요소를 제거하면 개체에 대한 목록의 참조만 제거됩니다. 개체는 여전히 메모리에 있습니다. 개체를 삭제하면 개체가 더 이상 존재하지 않으며 해당 메모리가 회수됩니다. 따라서 목록이 더 이상 존재하지 않는 개체에 액세스하지 않도록 요소의 개체가 삭제된 직후 요소를 제거하는 것이 중요합니다.
배열의 모든 요소를 삭제하려면
배열을 반복하려면 인덱스 값을 사용하고
GetSize
정수로 지정합니다.연산자를
delete
사용하여 반복에서 발생한 각 요소를 삭제합니다.함수를
RemoveAll
호출하여 삭제된 후 배열에서 모든 요소를 제거합니다.배열의 모든 요소를 삭제하는 코드는 다음과 같습니다.
CArray<CPerson*, CPerson*> myArray; int i = 0; while (i < myArray.GetSize()) { delete myArray.GetAt(i++); } myArray.RemoveAll();
위의 목록 예제와 마찬가지로 배열의 모든 요소를 제거하거나 RemoveAt
개별 요소를 제거하도록 호출 RemoveAll
할 수 있습니다.
맵의 모든 요소를 삭제하려면
GetNextAssoc
배열을 사용하고GetStartPosition
반복합니다.연산자를
delete
사용하여 반복 시 발생하는 각 맵 요소의 키 및/또는 값을 삭제합니다.함수를
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
할 수 있습니다.