Pointers 托管C指针在完成其即时

Pointers 托管C指针在完成其即时,pointers,c++-cli,managed,Pointers,C++ Cli,Managed,我有一个问题,从托管C生成大量数据并在C中用于UI 以下是一个例子: 管理方: public ref class c1 { public: c1(void); ~c1(void); String ^Name; double dtata; }; public ref class c2 { public: c2(void); ~c2(void); !c2(); String ^Name; List<c1^> ^a

我有一个问题,从托管C生成大量数据并在C中用于UI

以下是一个例子:

管理方:

public ref class c1
{
public:
    c1(void);
    ~c1(void);
    String ^Name;
    double dtata;
};


public ref class c2
{
public:
    c2(void);
    ~c2(void);
    !c2();
    String ^Name;
    List<c1^> ^arrData;

    void CreateData();
    void Clear();

};

void c2::CreateData()
{
    arrData=gcnew List<c1^>();
    for(int i=0;i<1000000;i++)
    {
        c1^ d=gcnew c1;
        arrData->Add(d);
    }
}
void c2::Clear()
{
    if(arrData)
    {
        delete arrData;
        arrData=nullptr;
    }
    GC::Collect();
}
结果是调用测试函数后,内存从4MB增加到13MB

问题是为什么cx不从内存中释放


感谢您对C++/CLI的查找,引用类型中的析构函数将对您的资源执行确定性清理。终结器清理非托管资源,可以由析构函数确定地调用,也可以由垃圾收集器非确定地调用。请参阅

因此,您需要实现终结器来释放内存

void Test()
{
using (c2 cx = new c2())
       {
         cx.CreateData();
         cx.Clear();
         cx.Dispose();

        }
}