CComObject, CComAggObject і CComPolyObject

Шаблон класів, CComObject, CComAggObjectта CComPolyObject завжди є найбільш похідні класів у ланцюжка наслідування. Це їх відповідальність, щоб обробляти всі методи в IUnknown: QueryInterface, AddRefта звільнення. Крім того, CComAggObject і CComPolyObject (якщо використовується для агрегованих об'єктів) надати спеціальні підрахунок та QueryInterface семантиці, необхідних для внутрішньої невідомий.

Чи використовується CComObject, CComAggObjectабо CComPolyObject залежить від чи ви оголосити DECLARE_POLY_AGGREGATABLE макрос і чи є агреговані ваш об'єкт:

Переваги використання CComAggObject і CComObject є, що впровадження IUnknown оптимізовано для типу створюваного об'єкту. Наприклад, незгруповані об'єкт потрібні тільки кількість посилань, поки об'єкт агрегованих потребує як кількість посилань на внутрішній невідомим, так і вказівник на зовнішні невідомі.

Перевага використання CComPolyObject полягає в тому, що вам уникнути CComAggObject і CComObject у ваш модуль для обробки агрегованих і незгруповані випадках. Один CComPolyObject об'єкт ручками обох випадках. Це означає, що лише одну копію Віртуальна таблиця і однієї копії функцій, що існують у ваш модуль. Якщо ваш таблиці великий, це може суттєво знизити ваш розмір модуля. Однак, якщо ваш таблиці невеликих, використовуючи CComPolyObject може призвести до дещо більший розмір модуля тому, що він не оптимізований для об'єкта агрегованих або незгруповані, як CComAggObject і CComObject.

DECLARE_POLY_AGGREGATABLE макрос буде автоматично додано до вашого класу визначення за допомогою майстра об'єкт ATL повний доступ або керування браузера Internet Explorer. Щоб отримати додаткові відомості про роботу майстра в розділі Створення ATL-проект.

Index