Die Vorlagenklassen, CComObject, CComAggObjectund CComPolyObject sind immer die am weitesten abgeleiteten Klassen in der Vererbungskette. Es ist ihre Verantwortung, alle Methoden in IUnknownbehandeln: QueryInterface, AddRefund Release. Zusätzlich stellen CComAggObject und CComPolyObject (bei Verwendung für die aggregierten Objekte) die spezielle Verweiszählung und QueryInterface Semantik für die innere Unbekannte erforderlich.
Ob CComObject, CComAggObjectoder CComPolyObject verwendet wird ist abhängig von, ob Sie das DECLARE_POLY_AGGREGATABLE -Makro deklarieren und ob das Objekt gerade zusammengesetzt wird:
Der Vorteil der Verwendung von CComAggObject und CComObject ist, dass die Implementierung von IUnknown ist optimiert für die Art des Objekts erstellt wird. Zum Beispiel braucht ein zusammengesetzten Objekts nur einen Verweiszähler, während ein aggregierter Objekt einen Verweiszähler für die innere Unbekannte und ein Zeiger auf die äußere unbekannte braucht.
Der Vorteil der Verwendung CComPolyObject ist, dass Sie vermeiden, dass CComAggObject und CComObject im Modul, die aggregierte und zusammengesetzten Fälle zu behandeln. Ein einzelnes CComPolyObject -Objekt behandelt die beiden Fälle. Dies bedeutet, dass nur eine Kopie des der Vtable und eine Kopie der Funktionen im Modul vorhanden sind. Wenn Ihre Vtable groß ist, kann dies Ihre Modulgröße erheblich verringern. Jedoch wenn Ihre Vtable klein ist, kann mit CComPolyObject in einer etwas größeren Modulgröße führen, da es nicht für eine aggregierte oder zusammengesetzten Objekts optimiert ist CComAggObject und CComObject sind.
Das DECLARE_POLY_AGGREGATABLE -Makro wird automatisch auf die Klassendefinition durch den Assistenten für ATL-Objekte hinzugefügt, wenn Sie einen Vollzugriff oder Internet Explorer-Steuerelement erstellen. Weitere Informationen zum Assistenten finden Sie unter Erstellen eines ATL-Projekts.