佚名通过本文主要向大家介绍了ccomptr,ccomptr 头文件,ccomptr idispatch,ccomptr 用法,pel等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: CComPtr<IHTMLElement> pel是否都得用pelRelease;释放?
描述:
解决方案1:
描述:
绝大多数例子代码都是不释放的,哪个正确
解决方案1:
不用手动释放,跟智能指针是类似的
解决方案2: ATLBASE.H
~CComPtr()
{
if (p)
p->Release();
}
void Release()
{
IUnknown* pTemp = p;
if (pTemp)
{
p = NULL;
pTemp->Release();
}
}
若手动释放,必须使用 .Release()
不用pel.Release();来释放。
因为CComPtr本身就是要解决这个问题而产生的:)
不释放---正确
pel.Release()---正确,但只有在pel有效时才能调用,通常是 if (pel) pel.Release();
pel->Release()---错误,将造成引用计数混乱,组件可能被提前释放。
您可能想查找下面的文章:
- 为什么用CComPtr<IObj>创建的对象不能Release,而用IObj创建对象指针,就可以Release?
- CComPtr与_com_ptr_t模板
- CComPtr什么时候需要release?
- 程序中用了CComPtr的话,还需要CoInitialize和CoUninitialize吗?
- CComPtr未定义;atlcomhrequiresatlbasehtobeinclud
- CComQIPtr比CComPtr的好处在于哪里?不再需要显示调用QueryInterface了?
- CComPtr指针的构造函数是不是已经包含了CoCreateInstance了?
- _ApplicationPtr和CComPtr的区别
- CComPtr<I>sp能否作为函数参数传递?
- "focus”:不是“ATL::_NoAddRefReleaseOnCComPtr<T>”的成员的原因?