首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

DXUT 怎的释放类中的COM对象该

2013-01-11 
DXUT 怎样释放类中的COM对象该?我想把某些网格体、效果、纹理封装在一个类CObject中,头文件中是这样定义这个

DXUT 怎样释放类中的COM对象该?

我想把某些网格体、效果、纹理封装在一个类CObject中,头文件中是这样定义这个类的:
class CObject
{
public:
CObject ();
~CObject () ;
voidOnCreateDevice() ;
HRESULT OnRender( LPDIRECT3DDEVICE9 pDevice) ;
void    OnLostDevice() ;
void    OnResetDevice() ;
void    OnDestroyDevice() ;
private:
LPD3DXMESH              m_pMesh ;
LPDIRECT3DTEXTURE9      m_pTexture ;
LPD3DXEFFECT            m_pEffect;
};
/////////////////////////////////////////////////////////////////////
.cpp文件大体是这样的:
CObject::CObject()
{
}
CObject::~CObject()
{
}
void CObject::OnCreateDevice() 
{
//创建网格、纹理、效果接口的引用
}
HRESULT CObject::OnRender( LPDIRECT3DDEVICE9 pDevice) 
{
//使用效果和纹理接口渲染网格体对象
}
void CObject::OnResetDevice()
{
//
}
void CObject::OnLostDevice()
{
//
}
void CObject::OnDestroyDevice()
{
SAFE_RELEASE(m_pTexture);
SAFE_RELEASE(m_pEffect);
SAFE_RELEASE(m_pMesh);
}

程序运行时一切正常,但关闭以后,总提示有内存未被释放。大体是这样的提示:
D3DX: MEMORY LEAKS DETECTED: 12 allocations unfreed (131440 bytes)

到底该怎样释放这些内存?析构函数中删除它们也不行,提示依旧。
请过往大侠们指点一下,谢谢!
[解决办法]
COM对象每次引用完就必须调用一次Release()方法。
[解决办法]
可以试试直接release三个资源,如果结果一样,可以逐个排查,试试二次release同一对象,如果不崩溃,说明你该对象引用计数大于1,可以看看有没有额外引用的情况。再者可能有临时COM对象忘记release()?一些Get*函数会生成对象的,此类对象也应Release

热点排行