CComPolyObject Class
Diese Klasse implementiert IUnknown für ein aggregiertes oder nicht aggregiertes Objekt.
template<
class contained
>
class CComPolyObject : public IUnknown, public CComObjectRootEx
< contained::_ThreadModel::ThreadModelNoCS >
Parameter
- contained
Die Klasse, die von abgeleitet CComObjectRoot oder von CComObjectRootEx sowie beliebiger anderer Schnittstellen möchten Sie auf das Objekt unterstützen.
Mitglieder
Öffentliche Konstruktoren
Name |
Description |
---|---|
Der -Konstruktor. |
|
Der Destruktor. |
Öffentliche Methoden
Name |
Description |
---|---|
Inkrementiert den Verweiszählerwert des Objekts. |
|
(Statisch) ermöglicht Ihnen, um ein neues Objekt CComPolyObject< contained> ohne den Mehraufwand von CoCreateInstance zu erstellen. |
|
Führt abschließende Initialisierungsschritte von m_contained aus. |
|
Führt endgültige Zerstörung von m_contained aus. |
|
Ruft einen Zeiger auf die angeforderte Schnittstelle ab. |
|
Dekrementiert den Verweiszählerwert des Objekts. |
Öffentliche Datenmember
Name |
Description |
---|---|
Delegaten-IUnknown-Aufrufe des äußeren Unbekannten, wenn das Objekt aggregiert wird oder zu IUnknown des Objekts, wenn das Objekt nicht aggregiert wird. |
Hinweise
CComPolyObject implementiert IUnknown für ein aggregiertes oder nicht aggregiertes Objekt.
Wenn eine Instanz von CComPolyObject erstellt wird, wird der Wert des äußeren Unbekannten überprüft. Wenn es NULL ist, wird IUnknown für ein aggregiertes Objekt nicht implementiert. Wenn das äußere Unbekannte nicht NULL ist, wird IUnknown für ein zusammengesetztes Objekt implementiert.
Der Vorteil der Verwendung von CComPolyObject ist, dass Sie vermeiden, CComAggObject und CComObject im Modul verfügen, um die aggregierten und nicht aggregierten Fälle zu behandeln. Einzelne CComPolyObject-Objekthandles beide Fälle. Dies bedeutet, dass nur eine Kopie des vtable und eine Kopie der Funktionen im Modul vorhanden sind. Wenn das vtable groß ist, kann dies die Modulgröße erheblich beeinträchtigt. Wenn das vtable ist, mit CComPolyObject eine einige größere Modulgröße führen klein, da sie nicht für ein aggregiertes oder nicht aggregiertes Objekt optimiert wird, wie können CComAggObject und CComObject.
Wenn das DECLARE_POLY_AGGREGATABLE-Makro in der Klassendefinition des Objekts angegeben wird, wird CComPolyObject verwendet, um das Objekt zu erstellen. DECLARE_POLY_AGGREGATABLE wird automatisch deklariert, wenn Sie den ATL-Projekt-Assistenten verwenden, um einen Kontrolle oder ein Internet Explorer-Steuerelement zu erstellen.
Wenn es aggregiert wird, verfügt das CComPolyObject-Objekt sein eigenes IUnknown, getrennt von IUnknown des äußeren Objekts und wird ein eigener Verweiszähler bei. CComPolyObject verwendet CComContainedObject, um dem äußeren Unbekannten zu delegieren.
Weitere Informationen zur Aggregation, finden Sie im Artikel Grundlagen von ATL-COM-Objekten.
Vererbungshierarchie
CComObjectRootBase
IUnknown
CComPolyObject
Anforderungen
Header: möchten