次の方法で共有


DECLARE_POLY_AGGREGATABLE

オブジェクトを作成するときは、CComPolyObject < x > のインスタンスが作成されるように指定します。

DECLARE_POLY_AGGREGATABLE( 
   x  
)

パラメーター

  • x
    [入力] 集約可能または集約不可能なものとして定義するクラス オブジェクトの名前。

解説

インスタンスの作成時には、外側の IUnknown の値がチェックされます。 値が NULL の場合、IUnknown は非集約オブジェクト用に実装されます。 外側の IUnknownNULL でない場合、IUnknown は集約オブジェクト用に実装されます。

DECLARE_POLY_AGGREGATABLE を使用する利点は、集約クラスと非集約クラスを処理するときに、モジュールに CComAggObjectCComObject の両方を持つ必要がないことです。 CComPolyObject オブジェクトが 1 つあれば両方を扱うことができます。 つまり、モジュール中には vtable のコピーと関数のコピーがそれぞれ 1 つだけ存在することになります。 vtable のサイズが大きい場合は、これによってモジュール サイズを大幅に縮小できます。 ただし、vtable のサイズが小さい場合は、CComPolyObject を使うとモジュール サイズが逆に大きくなってしまう可能性があります。これは、CComAggObjectCComObject とは異なり、CComPolyObject は集約オブジェクトや非集約オブジェクト用に最適化されていないためです。

ATL コントロール ウィザードを使用してフル コントロールを作成した場合は、DECLARE_POLY_AGGREGATABLE マクロが自動的にオブジェクトに宣言されます。

必要条件

**ヘッダー:**atlcom.h

参照

参照

CComPolyObject クラス

CComAggObject クラス

CComObject クラス

その他の技術情報

集約とクラス ファクトリに関するマクロ

ATL マクロ