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;

}

4

1 回答 1

0

在您创建的对象上调用 delete()(就像普通的 C++ 一样)。简单地取消引用指针将把对象留给垃圾收集器来处理。通常这很好,但是如果您在应用程序中使用大量内存,您不希望等待 GC 释放内存。确保您的析构函数删除由它们各自的析构函数分配的所有对象。这与纯 C++ 完全相同。C++/CLI 类隐式继承了 IDisposable 接口,而析构函数是 Dispose() 的包装器,因此您不必单独定义 dispose() (如果我没记错的话;无论如何您都不能这样做)。

于 2012-07-25T03:56:18.203 回答