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