此类为使用基于 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 内存管理例程的其他智能指针提供基础,例如和 CComQIPtr 和 CComPtr。 派生类添加自己的构造函数和运算符,但依赖于 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_CLASSNOTREG、CLASS_E_NOAGGREGATION、CO_E_CLASSSTRING 或 E_NOINTERFACE。 有关这些错误的描述,请参阅CoCreateClassInstance和CLSIDFromProgID。
注解
如果调用第一种形式的方法,则 CLSIDFromProgID 用于恢复 CLSID。 然后两种形式都调用 CoCreateClassInstance。
在调试版本中,如果 CComPtrBase::p 等于 NULL,则会发生断言错误。
 CComPtrBase::CopyTo
调用此方法将 CComPtrBase 指针复制到另一个指针变量。
HRESULT CopyTo(T** ppT) throw();
参数
ppT
接收 CComPtrBase 指针的变量地址。
返回值
成功时返回 S_OK,失败时返回 E_POINTER。
备注
将 CComPtrBase 指针复制到 ppT。 CComPtrBase::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
指向  对象的指针。
返回值
如果 CComPtrBase 和 pT 指向同一个对象,则返回 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。