我有内存泄漏吗?我正在构建一个游戏引擎,我有一些我认为正确的代码,但我的代码分析工具 (cppcheck) 说我有内存泄漏,这可能是误报。
我有一个(这是一个简单的用例)
class Mesh
{
D3DMATERIAL9* mpMaterials;
LPDIRECT3DTEXTURE9* mpTextures;
D3DMATERIAL9*& GetMaterials() { return mpMaterials; }
LPDIRECT3DTEXTURE9*& GetTexures() {return mpTextures; }
};
在我的网格类中,我有一些 directx 指针当我加载网格时,我将 shared_ptr 发送到要加载的图形管理器类中的函数。
在那个功能我做
void Renderer::LoadMesh( shared_ptr<Mesh> myMesh)
{
// other code
D3DMATERIAL9*& pMaterials= myMesh->GetMaterials();
LPDIRECT3DTEXTURE9*& pTextures= myMesh->GetTextures();
// other code
// and then instantiate them
pMaterials = new D3DMATERIAL9[matCount];
pTextures = new LPDIRECT3DTEXTURE9[texCount];
// And then i do some stuff with those objects.
}
现在在这个函数的末尾是当 cpp check 说 pMaterials 和 pTextures 泄露了它们的内存时。我的理解是 pMaterials 和 pTextures 是对 myMesh 中指针的引用,并且我实例化的内存存在于那里,因为 Mesh 类中的指针指向该实例化的内存,并且只要我稍后适当地销毁 Mesh 对象(并调用 delete[] mpMaterials; delete[] mpTextures; 在网格析构函数中)我没有泄漏内存对吗?