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选件类概述