共用方式為


Implementing CComObject, CComAggObject, and CComPolyObject

樣板類別 CComObjectCComAggObject,然後, CComPolyObject 永遠在繼承鏈結中的大多數的衍生類別。 為其負責處理所有在 IUnknown的方法: QueryInterfaceAddRef版本。 此外, CComAggObjectCComPolyObject (在用於彙總物件) 提供計數特殊的參考與這個內部未知的必要 QueryInterface 語意。

是否使用 CComObjectCComAggObjectCComPolyObject 取決於您是否已宣告之一 (或) 下列巨集:

巨集

作用

DECLARE_NOT_AGGREGATABLE

永遠使用 CComObject

DECLARE_AGGREGATABLE

使用 CComAggObject ,如果物件彙總和 CComObject ,否則會傳回。 CComCoClass 做包含這個巨集,如果 DECLARE_*_AGGREGATABLE 巨集都在您的類別中並未宣告任何建構函式,這會是預設值。

DECLARE_ONLY_AGGREGATABLE

永遠使用 CComAggObject。 如果物件沒有彙總,則傳回 FALSE。

DECLARE_POLY_AGGREGATABLE

當呼叫時, IClassFactory::CreateInstance , ATL CComPolyObject<CYourClass> 建立執行個體。 在建立時,則外部未知的值進行檢查。 如果是 NULLIUnknown 為 nonaggregated 物件上實作。 如果這個外部未知的參數不是 NULLIUnknown 為彙總的物件上實作。

使用 CComAggObjectCComObject 的優點是 IUnknown 的實作會建立哪種最佳化物件。 例如,在中,而一個彙總物件需要內部未知的參考次數和指標至外部 UNKNOWN,一 nonaggregated 物件只需要參考計數。

使用 CComPolyObject 的優點是您不會處理 CComAggObject 和的 CComObject 於模組彙總和 nonaggregated 情況。 單一 CComPolyObject 物件控制代碼兩種情況。 這表示只有一個複本的 vtable 和函式的一個複本存在於模組。 如果您 vtable 非常大,所以可以大幅降低模組大小。 不過,因此,如果您 vtable 很小,使用 CComPolyObject 可能造成更大的模組大小,因為它沒有為彙總或 nonaggregated 最佳化物件,就像 CComAggObjectCComObject

請參閱

參考

Fundamentals of ATL COM Objects

其他資源

Aggregation and Class Factory Macros