此类为分离式接口实现 IUnknown。
语法
template
<class contained>
class CComCachedTearOffObject : public
IUnknown,
public CComObjectRootEx<contained
::_ThreadModel::ThreadModelNoCS>
参数
contained
分离类,派生自 CComTearOffObjectBase 和希望分离对象支持的接口。
成员
公共构造函数
| 名称 | 描述 |
|---|---|
| CComCachedTearOffObject::CComCachedTearOffObject | 构造函数。 |
| CComCachedTearOffObject::~CComCachedTearOffObject | 析构函数。 |
公共方法
| 名称 | 描述 |
|---|---|
| CComCachedTearOffObject::AddRef | 递增 CComCachedTearOffObject 对象的引用计数。 |
| CComCachedTearOffObject::FinalConstruct | 调用 m_contained::FinalConstruct(分离类的方法)。 |
| CComCachedTearOffObject::FinalRelease | 调用 m_contained::FinalRelease(分离类的方法)。 |
| CComCachedTearOffObject::QueryInterface | 返回指向 CComCachedTearOffObject 对象的 IUnknown 的指针,或指向分离类(类 contained)上请求接口的指针。 |
| CComCachedTearOffObject::Release | 递减 CComCachedTearOffObject 对象的引用计数,并在引用计数为 0 时销毁它。 |
公共数据成员
| “属性” | 描述 |
|---|---|
| CComCachedTearOffObject::m_contained | 从分离类(类 contained)派生的 CComContainedObject 对象。 |
注解
CComCachedTearOffObject 为分离式接口实现 IUnknown。 此类与 CComTearOffObject 的不同之处在于 CComCachedTearOffObject 具有自己的 IUnknown,与所有者对象的 IUnknown 不同(所有者是为其创建分离的对象)。 CComCachedTearOffObject 对其 IUnknown 保持自己的引用计数,并在其引用计数为零时删除自身。 但是,如果查询其任何分离式接口,则所有者对象的 IUnknown 引用计数将递增。
如果实现分离的 CComCachedTearOffObject 对象已实例化,并且再次查询分离式接口,则重复使用 CComCachedTearOffObject 对象。 相比之下,如果通过所有者对象再次查询由 CComTearOffObject 实现的分离式接口,则另一个 CComTearOffObject 将被实例化。
所有者类必须实现 FinalRelease 并为 CComCachedTearOffObject 在缓存的 IUnknown 上调用 Release,这将减少其引用计数。 这将导致 CComCachedTearOffObject 的 FinalRelease 受到调用并删除分离式接口。
继承层次结构
CComObjectRootBase
IUnknown
CComCachedTearOffObject
要求
标头:atlcom.h
CComCachedTearOffObject::AddRef
按 1 递增 CComCachedTearOffObject 对象的引用计数。
STDMETHOD_(ULONG, AddRef)();
返回值
可用于诊断或测试的值。
CComCachedTearOffObject::CComCachedTearOffObject
构造函数。
CComCachedTearOffObject(void* pv);
参数
pv
[in] 指向 CComCachedTearOffObject 的 IUnknown 的指针。
备注
初始化 CComContainedObject 成员,m_contained。
CComCachedTearOffObject::~CComCachedTearOffObject
析构函数。
~CComCachedTearOffObject();
注解
释放所有已分配的资源并调用 FinalRelease。
CComCachedTearOffObject::FinalConstruct
调用 m_contained::FinalConstruct 用于创建 m_contained,CComContainedObject<contained> 对象用于访问由分离类实现的接口。
HRESULT FinalConstruct();
返回值
标准 HRESULT 值。
CComCachedTearOffObject::FinalRelease
调用 m_contained::FinalRelease 用于释放 m_contained,CComContainedObject<contained> 对象。
void FinalRelease();
CComCachedTearOffObject::m_contained
从分离类派生的 CComContainedObject 对象。
CcomContainedObject <contained> m_contained;
参数
contained
[in] 分离类,派生自 CComTearOffObjectBase 和希望分离对象支持的接口。
注解
继承的方法 m_contained 用于通过缓存的分离对象的 QueryInterface、FinalConstruct 和 FinalRelease 来访问分离类中的分离接口。
CComCachedTearOffObject::QueryInterface
检索指向所请求的接口的指针。
STDMETHOD(QueryInterface)(REFIID iid, void** ppvObject);
参数
iid
[in] 要请求的接口的 GUID。
ppvObject
[out] 指向 iid 标识的接口指针的指针;如果未找到接口,则为 NULL。
返回值
标准 HRESULT 值。
备注
如果请求的接口为 IUnknown,则返回指向 CComCachedTearOffObject 自身 IUnknown 并递增引用计数的指针。 否则,使用从 CComObjectRootEx 中继承的 InternalQueryInterface 方法查询分离类上的接口。
CComCachedTearOffObject::Release
按 1 递减引用计数,如果引用计数为 0,则删除 CComCachedTearOffObject 对象。
STDMETHOD_(ULONG, Release)();
返回值
在非调试版本中始终返回 0。 在调试生成中,返回可用于诊断或测试的值。