1

ベクトルを反復処理する for ループがあります。次に、指定された名前がモデルの名前と等しいかどうかを確認します。

最後に、ポインタを作成して返します。私の質問は、ポインターを削除しないとメモリリークが発生するかどうかです。

Model3D* ModelMemory::GetModel(char* name)
{
   for (std::vector<Model3D*>::reverse_iterator it = mModels->rbegin();it != mModel->rend();it++)
    {
        Model3D *model = *it;
        if (model->GetName() == name)
        {
             return model;
        }
    }
}

ご協力いただきありがとうございます!

- 編集 -

ここでの私の目標は、すべての 3d モデル (Model3D クラスに格納されている) をベクトルに格納して、後で Model3D の名前を使用して取得できるようにすることです。これを行うためのより良い方法はありますか?私のやり方は本当に良いプログラミングではないようです...

4

2 に答える 2

3

もちろん、後ですべてのモデルを削除しても、メモリ リークは発生しません。また、strcmp() を使用して 2 つの文字列を比較します。

于 2013-06-01T18:56:48.067 に答える
1

メモリを動的に割り当てていません。これは静的割り当てです

Model3D *model = *it;

この変数のコンテキスト ブロックが終了すると (つまり、このメソッドから戻ると)、破棄されます。静的に割り当てられたポインターのみです。

動的割り当てはnewオペレーターで行われ、何もありません。

リークをチェックする簡単なルールは、deletefor everynewです。

valgrindターミナル ツールでメモリ リークを確認できます。

于 2013-06-01T19:10:11.857 に答える