CComObject, CComAggObject 및 CComPolyObject 구현

CComObject, CComAggObject및 CComPolyObject 템플릿 클래스 상속 체인의 가장 많이 파생 된 클래스는 항상. 그것은 IUnknown에서 모든 메서드를 처리 하기 위해 그들의 책임: QueryInterface, AddRef및 Release. 또한, CComAggObject 및 CComPolyObject (집계 개체를 사용 하는) 경우 특별 한 참조 계산 및 QueryInterface 의미 내부 알에 필요한 제공。

개체가 집계 여부 및 DECLARE_POLY_AGGREGATABLE 매크로 선언 하는 여부에 따라 달라 집니다 CComObject, CComAggObject또는 CComPolyObject 사용 여부:

CComAggObject 및 CComObject 사용의 장점은 IUnknown 구현을 생성 되는 개체의 종류에 대 한 최적화. 예를 들어, 테이블인된 개체 에서만 참조 횟수 집계 개체 내부 알에 대 한 참조 횟수와 외부 알 수에 대 한 포인터를 필요로 하는 동안。

CComPolyObject 사용의 장점은 CComAggObject 및 CComObject 집계 및 테이블인 경우를 처리 하기 위해 모듈에 필요 하지 않는. 단일 CComPolyObject 개체는 두 경우를 처리합니다. 이 모듈에 존재 하는 vtable의 복사본 하나만 함수 중 하나의 복사본을 의미 합니다. 귀하의 vtable 큰 경우이 실질적으로 모듈 크기를 줄일 수 있습니다. 그러나, 귀하의 vtable 작은 경우 CComPolyObject 를 사용 하 여 발생할 수 있습니다 약간 더 큰 모듈 크기는 집계 또는 테이블인 개체에 대 한 최적화 되지 않은 때문에 CComObject , CComAggObject 그리고。

DECLARE_POLY_AGGREGATABLE 매크로 자동으로 추가 됩니다 클래스 정의에 ATL 개체 마법사에서 모든 권한 또는 Internet Explorer 컨트롤을 만들 때. 마법사에 대 한 자세한 내용은 ATL 프로젝트 만들기 을 참조 하십시오.

Index