CComPtrBase

此类为使用基于 COM 的内存例程的智能指针类提供基础。

语法

template <class T>
class CComPtrBase

参数

T
智能指针要引用的对象类型。

成员

公共构造函数

名称 描述
CComPtrBase::~CComPtrBase 析构函数。

公共方法

名称 描述
CComPtrBase::Advise 调用此方法在 CComPtrBase 的连接点与客户端的接收器之间创建连接。
CComPtrBase::Attach 调用此方法以获取现有指针的所有权。
CComPtrBase::CoCreateInstance 调用此方法创建与指定的类 ID 或程序 ID 关联的类的对象。
CComPtrBase::CopyTo 调用此方法将 CComPtrBase 指针复制到另一个指针变量。
CComPtrBase::Detach 调用此方法可释放指针的所有权。
CComPtrBase::IsEqualObject 调用此方法来检查指定的 IUnknown 是否指向与 CComPtrBase 对象关联的同一对象。
CComPtrBase::QueryInterface 调用此方法返回一个指向指定接口的指针。
CComPtrBase::Release 调用此方法可释放接口。
CComPtrBase::SetSite 调用此方法将 CComPtrBase 对象的站点设置为父对象的 IUnknown

公共运算符

“属性” 描述
CComPtrBase::operator T* 强制转换运算符。
CComPtrBase::operator ! NOT 运算符。
CComPtrBase::operator & address-of & 运算符。
CComPtrBase::operator * pointer-to * 运算符。
CComPtrBase::operator < 小于运算符。
CComPtrBase::operator == 相等运算符。
CComPtrBase::operator -> 指向成员的指针运算符。

公共数据成员

“属性” 描述
CComPtrBase::p 指针数据成员变量。

备注

此类为使用 COM 内存管理例程的其他智能指针提供基础,例如和 CComQIPtrCComPtr。 派生类添加自己的构造函数和运算符,但依赖于 CComPtrBase 提供的方法。

要求

Header: atlcomcli.h

CComPtrBase::Advise

调用此方法在 CComPtrBase 的连接点与客户端的接收器之间创建连接。

HRESULT Advise(
    IUnknown* pUnk,
    const IID& iid,
    LPDWORD pdw) throw();

参数

pUnk
一个指针,指向客户端的 IUnknown

iid
连接点的 GUID。 通常,此 GUID 与由连接点管理的传出接口相同。

pdw
一个指针,指向唯一标识连接的 Cookie。

返回值

成功时返回 S_OK,失败时返回错误 HRESULT

备注

有关详细信息,请参阅 AtlAdvise

CComPtrBase::Attach

调用此方法以获取现有指针的所有权。

void Attach(T* p2) throw();

参数

p2
CComPtrBase 对象将获取此指针的所有权。

注解

Attach 对现有的 CComPtrBase::p 成员变量调用 CComPtrBase::Release,然后将 p2 分配给 CComPtrBase::p。 当一个 CComPtrBase 对象获得一个指针的所有权时,它会自动在指针上调用 Release,如果对象上的引用计数变为 0,它将删除指针和任何分配的数据。

CComPtrBase::~CComPtrBase

析构函数。

~CComPtrBase() throw();

备注

释放 CComPtrBase 指向的接口。

CComPtrBase::CoCreateInstance

调用此方法创建与指定的类 ID 或程序 ID 关联的类的对象。

HRESULT CoCreateInstance(
    LPCOLESTR szProgID,
    LPUNKNOWN pUnkOuter = NULL,
    DWORD dwClsContext = CLSCTX_ALL) throw();

HRESULT CoCreateInstance(
    REFCLSID rclsid,
    LPUNKNOWN pUnkOuter = NULL,
    DWORD dwClsContext = CLSCTX_ALL) throw();

参数

szProgID
指向 ProgID 的指针,用于恢复 CLSID。

pUnkOuter
如果为 NULL,则表明对象不是作为聚合的一部分创建的。 如果非 NULL,则为指向聚合对象的 IUnknown 接口(控制 IUnknown)的指针。

dwClsContext
管理新创建对象的代码将在其中运行的上下文。

rclsid
CLSID 与将用于创建对象的数据和代码相关联。

返回值

成功时返回 S_OK,失败时返回 REGDB_E_CLASSNOTREGCLASS_E_NOAGGREGATIONCO_E_CLASSSTRINGE_NOINTERFACE。 有关这些错误的描述,请参阅CoCreateClassInstanceCLSIDFromProgID

注解

如果调用第一种形式的方法,则 CLSIDFromProgID 用于恢复 CLSID。 然后两种形式都调用 CoCreateClassInstance

在调试版本中,如果 CComPtrBase::p 等于 NULL,则会发生断言错误。

CComPtrBase::CopyTo

调用此方法将 CComPtrBase 指针复制到另一个指针变量。

HRESULT CopyTo(T** ppT) throw();

参数

ppT
接收 CComPtrBase 指针的变量地址。

返回值

成功时返回 S_OK,失败时返回 E_POINTER

备注

CComPtrBase 指针复制到 ppTCComPtrBase::p 成员变量的引用计数递增。

如果 ppT 等于 NULL,将返回错误 HRESULT。 在调试版本中,如果 ppT 等于 NULL,则会发生断言错误。

CComPtrBase::Detach

调用此方法可释放指针的所有权。

T* Detach() throw();

返回值

返回对象的副本。

备注

释放指针的所有权,将 CComPtrBase::p 数据成员变量设置为 NULL,并返回指针的副本。

CComPtrBase::IsEqualObject

调用此方法来检查指定的 IUnknown 是否指向与 CComPtrBase 对象关联的同一对象。

bool IsEqualObject(IUnknown* pOther) throw();

参数

pOther
要比较的 IUnknown *

返回值

如果对象相同,则返回 true,否则返回 false。

CComPtrBase::operator !

NOT 运算符。

bool operator!() const throw();

返回值

如果 CComHeapPtr 指针等于 NULL,则返回 true,否则返回 false。

CComPtrBase::operator &

address-of & 运算符。

T** operator&() throw();

返回值

返回 CComPtrBase 对象指向的对象的地址。

CComPtrBase::operator *

pointer-to * 运算符。

T& operator*() const throw();

返回值

返回 CComPtrBase::p 的值;即指向 CComPtrBase 对象引用的对象的指针。

在调试版本中,如果 CComPtrBase::p 等于 NULL,则会发生断言错误。

CComPtrBase::operator ==

相等运算符。

bool operator== (T* pT) const throw();

参数

pT
指向对象的指针。

返回值

如果 CComPtrBasepT 指向同一个对象,则返回 true,否则返回 false。

CComPtrBase::operator ->

指向成员的指针的运算符。

_NoAddRefReleaseOnCComPtr<T>* operator->() const throw();

返回值

返回 CComPtrBase::p 数据成员变量的值。

备注

使用此运算符调用 CComPtrBase 对象指向的类中的方法。 在调试版本中,如果 CComPtrBase 数据成员指向 NULL,将发生断言失败。

CComPtrBase::operator <

小于运算符。

bool operator<(T* pT) const throw();

参数

pT
指向对象的指针。

返回值

如果当前对象管理的指针小于与其进行比较的指针,则返回 true。

CComPtrBase::operator T*

强制转换运算符。

operator T*() const throw();

注解

返回指向类模板中定义的对象数据类型的指针。

CComPtrBase::p

指针数据成员变量。

T* p;

注解

此成员变量保存指针信息。

CComPtrBase::QueryInterface

调用此方法返回一个指向指定接口的指针。

template <class Q> HRESULT QueryInterface(Q
** pp) const throw();

参数

Q
需要其接口指针的对象类型。

pp
接收请求的接口指针的输出变量的地址。

返回值

成功时返回 S_OK,失败时返回 E_NOINTERFACE

备注

此方法调用 IUnknown::QueryInterface

在调试版本中,如果 pp 等于 NULL,则会发生断言错误。

CComPtrBase::Release

调用此方法可释放接口。

void Release() throw();

备注

接口被释放,并 CComPtrBase::p 设置为 NULL。

CComPtrBase::SetSite

调用此方法将 CComPtrBase 对象的站点设置为父对象的 IUnknown

HRESULT SetSite(IUnknown* punkParent) throw();

参数

punkParent
一个指针,指向父级的 IUnknown 接口。

返回值

成功时返回 S_OK,失败时返回错误 HRESULT

备注

此方法调用 AtlSetChildSite

另请参阅

类概述