请问一个CComPtr对象释放的有关问题
请教一个CComPtr<T>对象释放的问题
一个已编译成exe的程序,在第一次解析xml文件的时候能够正确运行.当退出该程序重新进入再解析同一xml文件时就报错,错误如下:
File C:\program File\Windows CE tools\wce420\pocket pc 2003\include\atlbase.h line 758
我找到line 758代码是:
_NoAddRefReleaseOnCComPtr <T> * operator-> () const
{
ATLASSERT(p!=NULL);
return (_NoAddRefReleaseOnCComPtr <T> *)p;
那就是说p!=NULL,我想问一下,使用CComPtr不是不需要调用release/detach的吗?这个错误是什么原因呢?
------解决方案--------------------
调用之前先把CComPtr <T> 的值赋成NULL。
CComPtr不需要显示release是指在对象的生存期内。你的CComPtr一定是放在了功能模块之外定义的,所以功能模块退出时CComPtr并没有被释放
一个已编译成exe的程序,在第一次解析xml文件的时候能够正确运行.当退出该程序重新进入再解析同一xml文件时就报错,错误如下:
File C:\program File\Windows CE tools\wce420\pocket pc 2003\include\atlbase.h line 758
我找到line 758代码是:
_NoAddRefReleaseOnCComPtr <T> * operator-> () const
{
ATLASSERT(p!=NULL);
return (_NoAddRefReleaseOnCComPtr <T> *)p;
那就是说p!=NULL,我想问一下,使用CComPtr不是不需要调用release/detach的吗?这个错误是什么原因呢?
------解决方案--------------------
调用之前先把CComPtr <T> 的值赋成NULL。
CComPtr不需要显示release是指在对象的生存期内。你的CComPtr一定是放在了功能模块之外定义的,所以功能模块退出时CComPtr并没有被释放