Wprowadzenie w życie CComObject, CComAggObject i CComPolyObject

Klas szablonów, CComObject, CComAggObjecti CComPolyObject są zawsze najbardziej pochodną klasy w łańcuchu dziedziczenia. Ich obowiązkiem do obsługi wszystkich metod w IUnknown: QueryInterface, AddRefi wydania. Dodatkowo CComAggObject i CComPolyObject (gdy stosowana dla obiektów zagregowane) oferują specjalne odniesienie liczenia i metody QueryInterface semantyki wymaganego do wewnętrznej nieznany.

Czy CComObject, CComAggObjectlub CComPolyObject jest używany zależy od czy stwierdzenie makra DECLARE_POLY_AGGREGATABLE oraz czy obiekt jest sumowanej:

Zaletą używania CComAggObject i CComObject się, że wdrożenie IUnknown jest zoptymalizowany dla rodzaju tworzony obiekt. Na przykład obiekt nonaggregated tylko wymaga licznika odwołań, podczas gdy obiekt zagregowane potrzebuje licznika odwołań do wewnętrznej nieznany i wskaźnik do zewnętrznego nieznany.

Zaletą używania CComPolyObject jest, można uniknąć, posiadające zarówno CComAggObject , jak i CComObject w module obsługi przypadkach zagregowanych i nonaggregated. Pojedynczy obiekt CComPolyObject obsługuje oba przypadki. Oznacza to, że istnieje tylko jedna kopia Tablica metod wirtualnych i jedną kopię funkcje w module. W przypadku dużych sieci Tablica metod wirtualnych, to znacznie zmniejszyć rozmiar modułu. Jednakże w przypadku małych sieci Tablica metod wirtualnych, przy użyciu CComPolyObject może spowodować nieco większy rozmiar modułu ponieważ nie jest optymalizowany dla obiektu zagregowanych lub nonaggregated, jak CComAggObject i CComObject.

Makro DECLARE_POLY_AGGREGATABLE automatycznie zostanie dodany do definicji klasy przez kreatora obiektu ATL podczas tworzenia Pełna kontrola lub formant programu Internet Explorer. Aby uzyskać więcej informacji na temat kreatora zobacz Tworzenie projektu ATL.

Index