Ccomobject から、CComAggObject、および CComPolyObject の実装

テンプレート クラス、 ccomobject からCComAggObject、およびCComPolyObjectは常に、最派生クラス継承チェーンです。IUnknownのメソッドすべてを処理するために彼らの責任です: QueryInterfaceAddRef、およびRelease。また、 CComAggObject (集計オブジェクトを使用するとき) CComPolyObject特別な参照カウント、 QueryInterfaceセマンティクスの内側の未知のために必要な提供します。

Ccomobject からCComAggObject、またはCComPolyObjectの使用かどうかどうか、 DECLARE_POLY_AGGREGATABLEマクロを宣言し、オブジェクトが集約されているかどうかに依存します。:

CComAggObject ccomobject からを使用する利点は、作成されるオブジェクトの種類をIUnknownの実装を最適化することです。集約オブジェクトを内部の不明の参照カウントと、外側の未知へのポインターを必要とする間、非集約オブジェクトのリファレンス カウントをだけ。

CComPolyObjectを使用する利点は、 CComAggObject ccomobject からモジュールに集約、非集約のケースを処理することを避けるためです。CComPolyObjectオブジェクトを 1 つは、両方のケースを処理します。これは、1 つは vtable のコピーと関数の 1 つのコピーをモジュールの存在を意味します。あなたの vtable が大きい場合は、この大幅にあなたのモジュールのサイズを減らすことができます。あなたの vtable が小さい場合は、集計または非集約オブジェクトの最適化されていないためCComAggObject ccomobject からただし、 CComPolyObjectを使用して、わずかに大きいモジュール サイズがあります。

フル コントロールまたは Internet Explorer のコントロールを作成するとき、 DECLARE_POLY_AGGREGATABLEマクロをクラス定義に、ATL オブジェクト ウィザードによって自動的に追加されます。ウィザードの詳細については、 「ATL プロジェクト作成を参照してください。

Index