我有一个带有Locate函数的c ++ - cli类Locator,它在运行时会占用大量内存。在运行结束时,大部分内存通过释放指针释放该函数,但仍有一些内存未被释放,如果我在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;
}
答案 0 :(得分:0)
对您创建的对象调用delete()(就像普通的C ++一样)。简单地解除引用指针将使垃圾收集器的对象处于废弃状态。通常情况下这很好,但是如果你在应用程序中使用了大量内存,那么你不希望等待GC释放内存。确保析构函数删除其各自析构函数分配的所有对象。这与普通C ++完全相同。 C ++ / CLI类隐式继承IDisposable接口,析构函数是Dispose()的包装器,所以你不必分别定义dispose()(如果我没记错的话,你无论如何都不能这样做。)