CComPolyObject选件类

此选件类实现合成或nonaggregated对象的 IUnknown

template<
   class contained 
>
class CComPolyObject : public IUnknown, public CComObjectRootEx
   < contained::_ThreadModel::ThreadModelNoCS >

参数

成员

x83dshsy.collapse_all(zh-cn,VS.110).gif公共构造函数

名称

说明

CComPolyObject::CComPolyObject

构造函数。

CComPolyObject::~CComPolyObject

该析构函数。

x83dshsy.collapse_all(zh-cn,VS.110).gif公共方法

名称

说明

CComPolyObject::AddRef

递增对象的引用计数。

CComPolyObject::CreateInstance

(静态)使您得以创建新的 CComPolyObject< contained> 对象,而无需开销 CoCreateInstance

CComPolyObject::FinalConstruct

执行 m_contained的最终初始化。

CComPolyObject::FinalRelease

执行 m_contained的最终损坏。

CComPolyObject::QueryInterface

检索指向请求的接口。

CComPolyObject::Release

递减对象的引用计数。

x83dshsy.collapse_all(zh-cn,VS.110).gif公共数据成员

名称

说明

CComPolyObject::m_contained

IUnknown 调用委托给外部未知,如果对象是聚合或对对象的 IUnknown 对象是否不聚合。

备注

CComPolyObject 实现合成或nonaggregated对象的 IUnknown

CComPolyObject 创建实例时,外部未知的值进行检查。如果是 NULLIUnknown 为一nonaggregated对象实现。如果外部未知不是 NULLIUnknown 为一个复合的对象实现。

使用 CComPolyObject 的优点是您避免为 CComAggObjectCComObject 在的模块处理合成和nonaggregated大小写。一个 CComPolyObject 对象处理两种情况。这意味着只有一个副本的vtable和函数的一个副本存在于您的模块。如果vtable大,则可以显着降低您的模块范围。但是,因此,如果vtable很小,使用 CComPolyObject 从而导致一个稍微大的模块范围,因为它没有为一个复合的或nonaggregated对象转换,如 CComAggObjectCComObject

如果 DECLARE_POLY_AGGREGATABLE 宏在对象类定义中指定,CComPolyObject 将用于创建自己的对象。如果使用ATL项目向导创建完整的控件或Internet Explorer控件,DECLARE_POLY_AGGREGATABLE 将自动声明。

如果聚合,CComPolyObject 对象都有自己的 IUnknown,与外部对象的 IUnknown,并维护自己引用计数。CComPolyObject 使用 CComContainedObject 委托给外部未知。

有关摘要的更多信息,请参见文章 ATL COM对象的基本知识

继承层次结构

CComObjectRootBase

CComObjectRootEx

IUnknown

CComPolyObject

要求

Header: atlcom.h

请参见

参考

CComObjectRootEx选件类

DECLARE_POLY_AGGREGATABLE

其他资源

ATL选件类概述