我有用/clr編譯的C++/CLI庫。庫中的內存泄漏
ref class MyClass
{
private:
array<int>^ d;
public:
MyClass()
{
int size=10000000;
d=gcnew array<int>(size);
for(int x=0;x<size;x++)
{
d[x]=x;
};
};
~MyClass()
{
MessageBox::Show(gcnew String(L"Disposed"));
};
protected:
!MyClass()
{
MessageBox::Show(gcnew String(L"Finalized"));
};
};
static MyClass^ Test()
{
MyClass^ mc = gcnew MyClass();
//msclr::auto_handle<MyClass^> mc = gcnew MyClass();//this shows error
//msclr::auto_handle<MyClass> mc = gcnew MyClass();//this either shows error
//due to return type of function Test()
return mc;
};
當我使用這種方法,它超出了範圍它應該顯示「Disposed」並釋放內存。
private void button1_Click(object sender, EventArgs e)
{
MyDll.MyClass mc= MyDll.Test();
}
不幸的是,它並沒有這樣做。只有通過執行Finalizer,應用程序退出後,內存纔會釋放。如何正確釋放這個內存?
如何配置陣列^obj = gcnew array (size);'? –
maszynaz
爲什麼'dispose後的GC.Collect();'命令不會自動調用? – maszynaz
它是.NET:處理事情你必須調用Dispose,否則垃圾收集器在某個時間點完成分配(以某種方式平衡性能和內存管理)。要處理一個對象數組,你必須遍歷數組並處理每個元素。 –