メモリリークはありますか?ゲーム エンジンを構築していて、正しいと思われるコードがいくつかありますが、コード分析ツール ( 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 チェックで pMaterials と pTextures がメモリ リークしたことを示しています。pMaterials と pTextures は myMesh 内のポインターへの参照であり、Mesh クラスのポインターはそのインスタンス化されたメモリを指しているため、インスタンス化したメモリはそこに存在し、後で適切に Mesh オブジェクトを破棄する限り (そして、delete[] mpMaterials; delete[] mpTextures; をメッシュ デストラクタで呼び出します) メモリ リークはありませんよね?