Sdílet prostřednictvím


CComObject, CComAggObject a CComPolyObject

Šablona třídy CComObject, CComAggObject, a CComPolyObject jsou vždy nejvíce odvozené třídy řetězce dědičnosti.Je jejich odpovědnosti za zpracování všech metod v IUnknown: QueryInterface , AddRef , a vydání.Kromě toho CComAggObject a CComPolyObject (při použití souhrnných objektů) poskytnout zvláštní referenční počítání a QueryInterface sémantiku pro vnitřní neznámé.

Zda CComObject , CComAggObject , nebo CComPolyObject je použit, závisí na zda prohlásit některé (nebo žádné) následující makra:

Makro

Účinek

DECLARE_NOT_AGGREGATABLE

Vždy používá CComObject .

DECLARE_AGGREGATABLE

Používá CComAggObject Pokud objekt shromažďovány a CComObject Pokud není.CComCoClassToto makro obsahuje tak pokud žádný z DECLARE_ * _AGGREGATABLE makra jsou deklarovány ve své třídě, bude výchozí.

DECLARE_ONLY_AGGREGATABLE

Vždy používá CComAggObject .Vrátí chybu, pokud objekt není agregované.

DECLARE_POLY_AGGREGATABLE

ATL vytvoří instanci CComPolyObject <CYourClass> při IClassFactory::CreateInstance se nazývá.Během vytváření se kontroluje hodnotu vnější neznámý.Pokud je NULL, IUnknown je implementováno pro objekt nonaggregated.Pokud není vnější neznámý NULL, IUnknown je implementováno pro agregovaný objekt.

Výhodou použití CComAggObject a CComObject je, že provádění IUnknown je optimalizován pro druh vytvářený objekt.Například nonaggregated objekt vyžaduje počet odkazů, zatímco počet odkazů pro neznámé vnitřní a vnější neznámý ukazatel musí agregovaný objekt.

Výhodou použití CComPolyObject je zabránit obě CComAggObject a CComObject v modulu pro zpracování případů souhrnné a nonaggregated.Jeden CComPolyObject objektu zpracovává obou případech.To znamená, že existují pouze jednu kopii virtuální tabulka a jednu kopii funkce v modulu.Pokud vaše virtuální tabulka je velký, to podstatně zmenšit velikost poštovní modul.Však pokud vaše virtuální tabulka je malá, pomocí CComPolyObject může vést k poněkud větší velikost modulu protože není optimalizována pro souhrnné nebo nonaggregated objektu, jako jsou CComAggObject a CComObject .

Viz také

Referenční dokumentace

Základy objektů COM ATL

Další zdroje

Agregace a třídu Factory makra