2012-07-24 38 views
0

我有一個C++ - cli類定位器,帶有一個函數定位在運行時需要大量內存。在運行結束時,通過釋放指針來釋放大部分內存,但仍有一些內存未被釋放,如果我在一個Lopp中連續運行該程序,它會疊加起來。有沒有一種方法可以完全刪除每次在函數結尾使用析構函數/構造函數分配的所有內存?從類方法中釋放分配的內存

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; 
你創建(就像普通的C++)的對象

}

+0

你還沒有告訴我們Locate()在做什麼。根據你的問題,你的問題似乎源於這個功能。 – DPD 2012-07-24 03:27:01

+0

我想知道是否可以做到這一點,無論Locate方法。分配堆中的所有變量,然後在最後刪除堆。 – fmvpsenior 2012-07-24 15:29:17

+0

「在最後刪除堆」我希望你不要指定一個操作符來清理整個堆。那是不可能的。 – DPD 2012-07-25 03:58:11

回答

0

呼叫刪除()。簡單地取消引用指針會使垃圾收集器的對象處置。通常情況下,這很好,但如果在應用程序中使用大量內存,則不希望等待GC釋放內存。確保您的析構函數刪除其各自析構函數分配的所有對象。這與純C++完全相同。 C++/CLI類隱式地繼承了IDisposable接口,並且析構函數是Dispose()的包裝器,因此您不必定義dispose()(如果我沒有記錯的話,您仍然無法這麼做)。