DECLARE_POLY_AGGREGATABLE
更新 : 2007 年 11 月
オブジェクトを作成するときは、**CComPolyObject<**x > のインスタンスが作成されるように指定します。
DECLARE_POLY_AGGREGATABLE(
x
)
パラメータ
- x
[入力] 集約可能または集約不可能なものとして定義するクラス オブジェクトの名前。
解説
インスタンスの作成時には、外側の IUnknown の値がチェックされます。値が NULL の場合、IUnknown は非集約オブジェクト用に実装されます。外側の IUnknown が NULL でない場合、IUnknown は集約オブジェクト用に実装されます。
DECLARE_POLY_AGGREGATABLE を使用する利点は、集約クラスと非集約クラスを処理するときに、モジュールに CComAggObject と CComObject の両方を持つ必要がないことです。CComPolyObject オブジェクトが 1 つあれば両方を扱うことができます。つまり、モジュール中には vtable のコピーと関数のコピーがそれぞれ 1 つだけ存在することになります。vtable のサイズが大きい場合は、これによってモジュール サイズを大幅に縮小できます。ただし、vtable のサイズが小さい場合は、CComPolyObject を使うとモジュール サイズが逆に大きくなってしまう可能性があります。これは、CComAggObject や CComObject とは異なり、CComPolyObject は集約オブジェクトや非集約オブジェクト用に最適化されていないためです。
ATL コントロール ウィザードを使用してフル コントロールを作成した場合は、DECLARE_POLY_AGGREGATABLE マクロが自動的にオブジェクトに宣言されます。
必要条件
ヘッダー : atlcom.h