.NET 托管内存泄露?!……
同志们,我发现了一个托管内存泄露的问题 而不是传统的非托管内存 见代码:
// tempExe.cpp: 主项目文件。
#include "stdafx.h"
using namespace System;
using namespace System::IO;
ref class ClassB;
public ref class ClassA
{
public:
	StreamWriter^ w;
	ClassB^ b;
	ClassA(ClassB^ b_l)
	{
		b=b_l;
		w= gcnew StreamWriter("xx.txt");
	}
	~ClassA()
	{
		w->WriteLine("Close ok!");
		w->Close();
	}
};
public ref class ClassB
{
public:
	ClassA^ a;
	ClassB()
	{
		a= gcnew ClassA(this);
	}
};
public ref class ClassC
{
public:
	StreamWriter^ w;
	ClassC()
	{
		w= gcnew StreamWriter("xx.txt");
	}
	~ClassC()
	{
		w->WriteLine("Close ok!");
		w->Close();
	}
};
int main(array<System::String ^> ^args)
{
     Console::WriteLine(L"Hello World");
	ClassB^ b=gcnew ClassB();
	Console::WriteLine("please put any thing");
	Console::ReadLine();
	delete b;
	b=nullptr;
	Console::WriteLine("stop pause");
	Console::ReadLine();
     return 0;
}
(我是C++ c#们将就一下吧……)
当我用c类(对照组)实验时 在第一次暂停时xx.txt无法正常访问 而当第二次暂停时 C类成功的释放,xx.txt中显示“close ok!! “
是 当用B类实验时,由于A,B类互相持有,导致在第二次暂停时(B类的指针已经释放)XX.TXT文件依然无法访问 并且在程序关闭后XX文件中也是为空白 没有“close ok!!”
大家有什么好一点的解决方法么? 当然我知道在类中加几个成员函数可以达成 但是这是牵强并且容易忘记的…… 能结合垃圾回收吗?……
------解决方案--------------------
c++.net被人遗忘的脚落。
代码不够整齐,累啊。。