当我在 C++/CLI DLL 中实现一个类时:
public ref class DummyClass
{
protected:
!DummyClass()
{
// some dummy code:
std::cout << "hello" << std::endl;
}
}
当我将该 DLL 加载到 C# 项目并通过重复创建对象来使用该类时:
static void Main()
{
while (true)
{
var obj = new DummyClass();
}
}
然后,在运行程序时,内存会慢慢消化到 OutOfMemoryException。
看来,每次我在 C++/CLI 中实现终结器时,都会发生这种内存泄漏(或垃圾收集的不良工作)。
为什么会发生这种内存泄漏?我怎样才能避免它并且仍然能够将终结器用于其他(更复杂的)用途?
更新:原因肯定不是在终结器中写入 Console / stdout 或其他非标准代码,以下类具有相同的内存泄漏行为:
public ref class DummyClass
{
private:
double * ptr;
public:
DummyClass()
{
ptr = new double[5];
}
protected:
!DummyClass()
{
delete [] ptr;
}
}