描述:
HRESULT FinalConstruct()
{
p=NULL ; // p,p1 is a pointer which point to char
p1=NULL ;
p=new char[100];
if(p== NULL)
return E_OUTOFMEMORY ;
p1=new char[100] ;
if(p1== NULL)
return E_OUTOFMEMORY
}
void FianlRelease()
{
if(p!=NULL)
delete []p ;
if(p1!=NULL)
delete []p1;
}
如果p 分配内存成功 ,p1 分配不成功, 就会return E_OUTOFMEMORY , return
后还会调用 FianlRelease() 吗? 如果不调用,是不是 p的内存就没有释放,
泄漏了?
请大家执教!!! 谢谢!
解决方案1:
我跟了一下,E_OUTOFMEMORY 时FianlRelease()可以执行,但是当你一创建对象它就会立马执行,它回认为对象创建不成功直接Release掉。
看看源代码:
HRESULT FinalConstruct()
{
CComObjectRootEx<contained::_ThreadModel::ThreadModelNoCS>::FinalConstruct();
return m_contained.FinalConstruct();
}
void FinalRelease() //会直接执行到这里
{
CComObjectRootEx<contained::_ThreadModel::ThreadModelNoCS>::FinalRelease();
m_contained.FinalRelease();
}