0

実行中に多くのメモリを消費する関数 Locate を持つ c++-cli クラス Locator があります。実行の最後に、ポインターを解放することにより、ほとんどのメモリが関数内で解放されますが、まだ割り当てが解除されていないメモリがいくつかあり、ループでプログラムを連続して実行するとスタックします。毎回関数の最後にデストラクタ/コンストラクタを使用して割り当てられたすべてのメモリを完全に削除する方法はありますか?

public ref class Locator

{
public:
Locator() { } 
~Locator()  { } 
Dictionary<String^, array< Byte >^>^ Locate(Dictionary<String^, String^>^ imgParms) 
{ .....  }

private:
int m_HP;


int main ()

{   
Locator r;

Dictionary<String^,String^>^ myDictionary =   gcnew Dictionary<String^,String^>();

Dictionary<String^,List<array<Byte>^>^>^ myResult1 = gcnew  Dictionary<String^,List<array<Byte>^>^>(); 



myResult1=r.Locate(myDictionary,0);

return 0;

}

4

1 に答える 1

0

作成したオブジェクトに対して delete() を呼び出します (プレーンな C++ と同様)。単にポインターを逆参照すると、ガベージ コレクターが破棄するオブジェクトが残されます。通常はこれで問題ありませんが、アプリケーションで大量のメモリを使用する場合は、GC がメモリを解放するのを待ちたくありません。デストラクタが、それぞれのデストラクタによって割り当てられたすべてのオブジェクトを削除することを確認してください。これはプレーンな C++ とまったく同じです。C++/CLI クラスは IDisposable インターフェイスを暗黙的に継承し、デストラクタは Dispose() のラッパーであるため、dispose() を個別に定義する必要はありません (私の記憶が正しければ、とにかくそれを行うことはできません)。

于 2012-07-25T03:56:18.203 に答える