참고
ATL(활성 템플릿 라이브러리)은 계속 지원됩니다. 그러나 더 이상 기능을 추가하거나 설명서를 업데이트하지 않습니다.
COM 자체는 개체가 더 이상 사용되지 않는다고 생각할 때 자동으로 메모리에서 개체를 제거하려고 시도하지 않습니다. 대신 개체 프로그래머가 사용되지 않는 개체를 제거해야 합니다. 프로그래머가 참조 횟수에 따라 개체를 제거할 수 있는지 여부를 결정합니다.
COM은 IUnknown AddRef 및 Release 메서드를 사용하여 개체에 대한 인터페이스의 참조 수를 관리합니다. 이러한 메서드를 호출하는 일반적인 규칙은 다음과 같습니다.
클라이언트가 인터페이스 포인터
AddRef를 받을 때마다 인터페이스에서 호출해야 합니다.클라이언트가 인터페이스 포인터 사용을 완료할 때마다 호출
Release해야 합니다.
간단한 구현에서 각 AddRef 호출은 증가하며 각 Release 호출은 개체 내의 카운터 변수를 감소합니다. 개수가 0으로 반환되면 인터페이스에 더 이상 사용자가 없으며 메모리에서 자유롭게 제거할 수 있습니다.
개별 인터페이스가 아닌 개체에 대한 각 참조가 계산되도록 참조 계산을 구현할 수도 있습니다. 이 경우 각 AddRef 및 Release 호출은 해당 개체의 중앙 구현에 위임하며, Release는 참조 수가 0에 도달했을 때 전체 개체를 해제합니다.
참고
CComObject 연산자를 사용하여 new 파생 객체를 생성할 때 참조 수는 0입니다. 따라서 AddRef에서 파생된 개체를 CComObject 성공적으로 만든 후에 호출해야 합니다.