templatelt; класссодержащиеся >
класс CComPolyObject: государственные IUnknown, общественного CComObjectRootEx <содержащиеся:: _ThreadModel::ThreadModelNoCS >
Параметры
содержащиеся
Ваш класс, производный от CComObjectRoot или CComObjectRootEx, а также от любых других интерфейсов, которые вы хотите поддержать на объекте.
Реализует CComPolyObject IUnknown для агрегированных или неагрегированные объекта.
Когда создается экземпляр CComPolyObject , проверяется значение внешнее неизвестного. Если это значение NULL, для объекта неагрегированные реализован IUnknown . Если внешнее неизвестного не является NULL, Реализовано IUnknown для объекта агрегированных.
Преимуществом использования CComPolyObject является, что вам избежать CComAggObject и CComObject в вашем модуле для обработки агрегированных и неагрегированные случаев. Объект CComPolyObject обрабатывает обоих случаях. Это означает, что только одна копия vtable и один экземпляр функции существуют в вашем модуле. Если ваш vtable большой, это может существенно уменьшить размер вашего модуля. Однако если ваш vtable невелико, использование CComPolyObject может привести к несколько больших размеров модуль потому, что он не оптимизирован для объекта агрегированных или неагрегированные, как CComAggObject и CComObject.
Если макрос DECLARE_POLY_AGGREGATABLE указан в определении класса вашего объекта, CComPolyObject будет использоваться для создания объекта. DECLARE_POLY_AGGREGATABLE автоматически будет объявляться, если используется мастер объектов ATL для создания полного контроля или управления Internet Explorer.
Если обобщения данных, объект CComPolyObject имеет свой собственный IUnknown, отдельно от IUnknownвнешнего объекта и ведется свой счетчик ссылок. CComPolyObject использует CComContainedObject , чтобы делегировать внешнее неизвестного.
Дополнительные сведения о агрегации можно найти в статье Основы ATL COM-объектов.
# include lt;atlcom.h>
См. также CComObjectRootEx, DECLARE_POLY_AGGREGATABLE