我目前正在使用 DirectX 使用 C++ 编写游戏。该引擎是我学校的一位教授给我们的,我一直在检查他的引擎中的内存泄漏,我相信我已经将它们追溯到这种方法。一开始,它甚至没有被调用,现在它被调用了,我不确定这是否是完全删除和清理由 DirectX 加载的纹理的正确方法。
这是在 TextureManager
上调用的方法:
void DirectXTextureManager::clear()
{
map<wchar_t*, LPDIRECT3DTEXTURE9>::iterator it;
map<wchar_t*, LPDIRECT3DTEXTURE9>::iterator itToErase;
it = textures->begin();
while (it != textures->end())
{
wchar_t *keyToDelete = (*it).first;
LPDIRECT3DTEXTURE9 textureToDelete = (*it).second;
itToErase = it;
it++;
textures->erase(itToErase);
delete keyToDelete;
textureToDelete->Release();
textureToDelete = NULL;
}
stringTable->emptyStringTable();
}
最佳答案
关于纹理部分,一切似乎都很好 - 在 LPDIRECT3DTEXTURE
对象上调用 Release()
来释放它就足够了:
LPDIRECT3DTEXTURE9 textureToDelete = (*it).second;
...
textureToDelete->Release();
我有点担心 stringTable
- 它是负责映射键中 wchar_t*
的部分吗?如果是这样,您应该检查 stringTable->emptyStringTable()
做了什么,也许不需要手动删除键。
关于c++ - C++ 中的 DirectX 纹理清理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8485199/